使用Knockout在下拉列表中绑定所选项

时间:2013-12-19 17:20:14

标签: javascript knockout.js

我正在尝试使用knockout绑定下拉列表的选定值。 HTML是:

<div>
Dummy
<select id="dummy" data-bind="options: DummyOptions, optionsCaption : 'Select..', optionsText: 'Message', value: selectedValue"></select>
</div>
<button data-bind="click : setDefault">click me </button>
<div data-bind="visible: selectedValue"> <!-- Appears when you select something -->
    You have chosen a country with population
    <span data-bind="text: selectedValue() ? selectedValue().Message : 'unknown'"></span>.

javascript是:

var dummyOptions =  ko.observableArray([{ isSelected: false, Message: "Test1" }, { isSelected: false, Message: "Test2"},{ isSelected: true, Message: "Test3"}]);

var defaultOption = ko.observable();

var vm = {
DummyOptions : dummyOptions,
selectedValue : defaultOption,
setDefault : function(){
    defaultOption = ko.observable( ko.utils.arrayFirst(dummyOptions(), function(item) {
        return item.isSelected;
    }) );   
}
};

ko.applyBindings(vm);

如果我在没有setDefault函数的情况下尝试这段JS代码并直接设置defaultOption变量,一切正常。但是,如果我按照列出代码的方式进行,则绑定不起作用。

小提琴的链接是:http://jsfiddle.net/tNZ8f/

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的setDefault函数不会更新defaultOption,但会重新定义它。您正在创建新的observable,并且未通知有关更改的绑定。 defaultOption = new value不是将新值写入可观察对象的正确方法。相反,您应该使用新值作为参数调用observable作为参数:defaultOption( new value )

你的setDefault函数应如下所示:

setDefault : function(){
    defaultOption( ko.utils.arrayFirst(dummyOptions(), function(item) {
        return item.isSelected;
    }) );   
}

更新了jsfiddle:http://jsfiddle.net/tNZ8f/1/