Knockout可写计算的可观察量

时间:2014-07-07 14:09:39

标签: javascript knockout.js knockout-2.0

我目前正在使用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行。)

1 个答案:

答案 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,以防我在工作示例中遗漏了任何内容。