我目前正在使用 Knockout 构建一个数据量很大的应用程序,但我遇到了使计算可观察对象可写的问题。
目前,我有一个下拉选项,用户可以在其中选择一个年龄组,然后从中选择的值将填充旁边的文本输入,以显示该年龄组的人口,这是一个计算得出的可观察值。下拉列表和文本输入值均从数组中填充。
我在下面设置了一个代码笔,但基本上您会看到文本输入的值是通过计算的可观察值生成的,并且当您从下拉列表中选择一个值时会应用正确的格式(通过自定义绑定(bind)处理程序!)。
我遇到的问题是,如果您在文本输入中输入自定义值(直接输入文本框而不是从下拉列表中选择值),那么当您模糊文本框时,自定义格式是未应用于您输入的值,我非常不确定如何着手解决这个问题。
self.selectedPopulation = ko.computed({
read: function () {
return self.chosenAge().population;
},
write: function (value) {
// write value back here?
},
});
代码笔:http://codepen.io/anon/pen/HkguL (写函数在第 76 行。)
最佳答案
您需要使 selectedPopulation 成为一个普通的可观察对象,并订阅 chosenAge 可观察对象以便在它发生变化时收到通知。
您需要使用虚拟对象创建 chosenAge 以阻止在绑定(bind)时爆炸:
self.chosenAge = ko.observable({age: '', population: ''});
然后将您的计算更改为可观察:
// Selected population
self.selectedPopulation = ko.observable('');
并订阅 chosenAge 可观察对象:
self.chosenAge.subscribe(function (newValue) {
self.selectedPopulation(newValue.population);
});
我以前没有用过CodePen,但我已经更新了你的代码here以防我在工作示例中遗漏任何内容。
关于javascript - knockout 可写计算可观察量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24612600/