javascript - knockout 可写计算可观察量

标签 javascript knockout.js knockout-2.0

我目前正在使用 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/

相关文章:

javascript - Knockout.js 使用拦截器扩展值绑定(bind)

多个 bool 值上的 Knockout.js "if Binding"

用于单击页面上每隔几分钟加载一次的按钮的 JavaScript

javascript - Knockout JS 不清除组件

javascript - meteor 发布/订阅不适用于服务器文件夹

javascript - 如何通过 knockout 设置visible = false

javascript - 如何使用另一页面的 Knockout JS 将一个 viewModel 数据传递到其他 ViewModel 函数

drop-down-menu - knockout 选择属性 :{title Binding} not working as expected for Observable array

javascript - 简单的 jQuery Accordion ,可以跟踪高度变化来为旁边的其他对象设置动画

javascript - Vue JS 应用程序上的 Passport JS 身份验证