淘汰js试图使用选择内部foreach

时间:2012-07-19 08:22:37

标签: javascript knockout.js knockout-2.0

我是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>

viewmodel位于下方(仅限代码段)

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中回答,这样运行正常并显示四行下面的下拉列表。

但是当我添加值:回答时,我得到以下异常

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

任何人都可以指出我在这里做错了什么。我到处都抬头,但我似乎无法找到解决这个问题的方法。

由于 Titash

1 个答案:

答案 0 :(得分:4)

您需要指定值:$ root.answer,因为此时的绑定上下文是bookQoute的当前实例,而不是root,因此Knockout将在bookQoute上查找answer属性而不是找到它。