问问题
884 次
1 回答
2
我不确定它是否是一个不错的 UI(难以导航和使用键盘进行选择)。话虽如此,这并不难实现。由于该read
值永远不会改变,我们需要确保在write
调用函数时通知订阅者(从而更新绑定的 DOM 元素),即使该read
值自上次以来没有改变。
旧答案包含一个使用两个可观察对象和一个手动订阅的解决方案(可以在http://jsfiddle.net/Emca9/看到)。这个编辑过的答案(在http://jsfiddle.net/Emca9/1/上更新了小提琴)使用了两个 observable,其中一个是可写的计算 observable,因为这是在评论中要求的。
像下面这样绑定select
元素:
<select data-bind="options: $parent.drivers,
optionsText: 'name',
value: selectedDriver,
optionsCaption: 'Select driver'">
</select>
在write
计算的 observable 的函数中,确保通知订阅者,以确保它们的 bindingHandlers 更新 DOM 元素(即选定的选项)。
function CarViewModel(data){
var self = this;
// ... removed other properties for brevity
self.todaysDriver = ko.observable();
self.selectedDriver = ko.computed({
read: function(){
return undefined;
},
write: function(newValue){
if (newValue){
self.todaysDriver(newValue);
self.selectedDriver.notifySubscribers();
}
}
});
}
于 2014-03-05T18:56:36.200 回答