我目前正在使用Knockout构建一个数量很大的应用程序,并且我遇到了使计算的可观察可写的问题。
目前我有一个下拉选项,其中用户选择一个年龄组,并且从中选择的值填充旁边的文本输入,以显示该年龄组的人口,该年龄组是计算的可观察量。下拉列表和文本输入值都是从数组中填充的。
我在下面设置了一个codepen,但基本上你会看到文本输入的值是通过计算的observable生成的,当你从下拉列表中选择一个值时,会应用正确的格式(通过自定义绑定处理程序!)。
我遇到的问题是,如果您在文本输入中输入自定义值(直接输入文本框而不是从下拉列表中选择值),那么当您模糊文本框时,自定义格式设置不会不适用于您输入的值,我很不确定如何解决这个问题。
self.selectedPopulation = ko.computed({
read: function () {
return self.chosenAge().population;
},
write: function (value) {
// write value back here?
},
});
Codepen:http://codepen.io/anon/pen/HkguL (写入功能位于第76行。)
答案 0 :(得分:4)
您需要使selectedPopulation成为正常的可观察对象,并订阅selectedAge observable以在更改时收到通知。
你需要创建一个带有虚拟对象的selectedAge,以阻止敲击爆炸:
self.chosenAge = ko.observable({age: '', population: ''});
然后将您的计算机更改为可观察的:
// Selected population
self.selectedPopulation = ko.observable('');
订阅selectedAge observable:
self.chosenAge.subscribe(function (newValue) {
self.selectedPopulation(newValue.population);
});
我之前没有使用过CodePen,但我已经更新了您的代码here,以防我在工作示例中遗漏了任何内容。