U1db 出現“ReferenceError:內容未定義”

U1db 出現“ReferenceError:內容未定義”

我正在嘗試從 U1db 資料庫中讀取資訊。
我遇到了這個錯誤
'ReferenceError: contents is not defined'
這是我的程式碼:

    import U1db 1.0 as U1db
    U1db.Database {
            id: db
            path: "lU1DbDatabase"
        }
    U1db.Document {
            id: doc
            database: db
            docId: 'doc1'
            create: true
            defaults: { "name":["Jerusalem"]}
        }
    U1db.Index{
            database: db
            id: index1
            expression: [["name"]]
        }
    U1db.Query{
            id: query1
            index: index1
        }
     OptionSelector {
                id:selector1
                model:query1
                delegate: OptionSelectorDelegate {
                                    text: i18n.tr(contents.name)//this work perfect
                                }
                onSelectedIndexChanged: {
                    console.log(contents.name);//this get the error!
                }
   }

這是大型程式碼的一部分,我刪除了導致問題的部分。
我究竟做錯了什麼?謝謝你!

答案1

您的問題不在於 U1DB,而是在於 OptionSelector。讓我們考慮一個更簡單的例子:

import QtQuick 2.0
import Ubuntu.Components 1.0

MainView {
    OptionSelector {
        model: ListModel {
            ListElement { name: "Item 1" }
            ListElement { name: "Item 2" }
        }
        delegate: OptionSelectorDelegate {
            text: i18n.tr(name)
        }
        onSelectedIndexChanged: {
            console.log(name)
        }
    }
}

當索引更改時,我們收到錯誤“ReferenceError:名稱未定義”。為什麼我們期望它被定義?我們沒有定義名為「name」的變量,且 OptionSelector 沒有「name」屬性。

為什麼我們可以在委託中引用「名稱」?從委託中為模型中的每個元素建立一個新物件。該物件從該清單元素取得屬性,並且我們的清單元素包含「名稱」屬性。同樣,在您的範例中,U1db.Query 產生具有「contents」屬性的清單元素,這顯然是具有「name」屬性的物件。

如果我們想在委託之外引用這些屬性,我們需要進入模型並提取它們:

            console.log(model.get(selectedIndex).name)

在您的情況下,模型是 U1db.Query,而不是 ListModel,因此它沒有get()方法。它確實有一個results我認為您可以索引的列表,但我對 U1db 的了解還不夠多,無法多說。希望這足以讓您走上正確的道路。

相關內容