事情是,您的計算observable只檢測數組上的更改activeAttributes.optionsSplitted
。文本框綁定到單個項目,因爲您從未實際更改activeAttributes.optionsSplitted
的值,因此不會發出警報。
如果你想能夠做到這一點,你有幾個選項。
將您的輸入綁定到change
事件,以便您可以在輸入中的值發生更改時執行所需操作。
<input type="text" data-bind="value: $data, event: { change: $root.changed }">
(fiddle)
或者,您也可以在值映射到包含觀察到的性能和執行的檢查存在的對象。您無法檢測對象本身的更改(任何更改都將是替換),因此您必須將該值映射到具有可寫計算屬性的對象。
self.activeAttributes.optionsSplitted = ko.computed(function(){
var options = self.activeAttributes().options().split("-*!*-");
return ko.utils.arrayMap(options, function (option) {
// does not work
//return ko.computed({
// read: function() { return option; },
// write: function (value) { alert('changed'); }
//});
return {
value: ko.computed({
read: function() { return option; },
write: function (value) { alert('changed'); }
})
};
});
});
然後綁定到屬性。
<input type="text" data-bind="value: value">
(fiddle)
這些都不是你唯一的當然選擇,可能有其他的事情,你可以在這裏做的,但這些都是浮現在腦海中。
我不知道,你告訴我們。你自己嘗試過嗎?它是否按預期工作?你期望發生什麼? –
我當時除了編輯輸入文本框時,應該調用寫入函數並提示警報,但這不會發生。 –