我正在尝试使用敲除绑定下拉列表的选定值。 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/
有什么建议么??
最佳答案
您的setDefault
函数不会更新defaultOption
,而是重新定义它。您正在创建新的可观察对象,并且绑定不会收到有关更改的通知。 defaultOption = new value
不是将新值写入可观察值的正确方法。相反,您应该使用新值作为参数:defaultOption( new value )
调用observable作为函数。
您的setDefault函数应如下所示:
setDefault : function(){
defaultOption( ko.utils.arrayFirst(dummyOptions(), function(item) {
return item.isSelected;
}) );
}
更新的jsfiddle:http://jsfiddle.net/tNZ8f/1/