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 が定義されていません」というエラーが発生します。なぜそれが定義されていると予想されるのでしょうか? 「name」という名前の変数を定義しておらず、OptionSelector には「name」プロパティがありません。

なぜデリゲートで「名前」を参照できるのでしょうか? モデル内の各要素のデリゲートから新しいオブジェクトが作成されます。このオブジェクトはそのリスト要素からプロパティを取得し、リスト要素には「名前」プロパティが含まれています。同様に、あなたの例では、U1db.Query は「コンテンツ」プロパティを持つリスト要素を生成しましたが、これは明らかに「名前」プロパティを持つオブジェクトでした。

デリゲートの外部でこれらのプロパティを参照する場合は、モデルにアクセスしてそれらを抽出する必要があります。

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

あなたの場合、モデルは ListModel ではなく U1db.Query なので、メソッドはありませんget()。インデックスを作成できると思われるリストはありますresultsが、U1db について十分な知識がないため、これ以上は説明できません。これで正しい方向に進めることを願っています。

関連情報