1 に答える
2
UI が優れているかどうかはわかりません (キーボードを使用してナビゲートして選択するのが難しい)。そうは言っても、これを達成するのは難しくありません。値は決して変更されないため、前回から値が変更されていなくても、関数が呼び出されread
たときにサブスクライバーに通知する (したがって、バインドされた DOM 要素を更新する) ようにする必要があります。write
read
古い回答には、2 つのオブザーバブルと手動サブスクリプションを使用したソリューションが含まれていました (これはhttp://jsfiddle.net/Emca9/で確認できます)。この編集された回答 ( http://jsfiddle.net/Emca9/1/で更新されたフィドル) は 2 つのオブザーバブルを使用します。そのうちの 1 つは、コメントで要求された書き込み可能な計算オブザーバブルです。
select
次のように要素をバインドします。
<select data-bind="options: $parent.drivers,
optionsText: 'name',
value: selectedDriver,
optionsCaption: 'Select driver'">
</select>
計算されたオブザーバブルのwrite
関数では、サブスクライバーに通知して、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 に答える