1

私は KO の初心者で、KO を使用するための小さなデモ プロジェクトに取り組んでいます。これは、ユーザーが選択できる質問とドロップダウン選択の回答を含む小さなフォームです。

HTML スニペットは

<div data-bind="foreach: $root.bookArr1" >
    <p> Which book says <span data-bind="text: $data.bookQoute"></span>.</p>
    <p><select data-bind="options: $root.bookArr, value: answer, optionsText: 'bookName', uniqueName: true"></select></p>           
</div>

ビューモデルは以下のとおりです (スニペットのみ)

this.firstName = ko.observable();
this.lastName = ko.observable();
this.answer = ko.observable();

this.bookQoutes = ([ 
    { bookQoute: "Curiouser and curiouser!", bookName: "Alice in wonderland" },
    { bookQoute: "Standard (iceream)", bookName: "PQR" },
    { bookQoute: "Standard (honey)", bookName: "LMY" },
    { bookQoute: "Standard (lemon)", bookName: "JND" }
]);

this.bookArr1 = ko.observableArray( this.bookQoutes );

this.bookArr = ko.observableArray( this.bookQoutes );

私の問題は、html から value : answer を削除すると、これが正常に実行され、その下にドロップダウンのある 4 行が表示されることです。

しかし、value: answer を追加すると、次の例外が発生します

Unable to parse bindings. Message: ReferenceError: answer is not defined; 
Bindings value: options: $root.bookArr, value: answer, optionsText: 'bookName', uniqueName: true

ここで私が間違っていることを誰でも指摘できますか。どこでも調べましたが、この問題の解決策が見つからないようです。

ありがとう

4

1 に答える 1

4

値$root.answerを指定する必要があります。これは、その時点でのバインディングコンテキストがルートではなくbookQouteの現在のインスタンスであるため、KnockoutはbookQouteでanswerプロパティを探し、それを見つけられないためです。

于 2012-07-19T09:14:03.920 に答える