如何通过名称写入observable?

时间:2015-10-20 12:24:52

标签: javascript knockout.js

我正在使用Knockout编写一个表单填充页面并基于一些旧的html表单,一切都很好但是html表单有一个按钮可以将一组地址数据从一组输入复制到另一组,我正在尝试使用此函数在我的ViewModel中复制类似的功能:

self.CopyData = function (source, target) {
    for (var i = 0; i < source.length; i++) {
        self[target[i]] = self[source[i]];
    };
};

其中source和target是字符串数组。

但是我认为这会失败,因为我没有写入淘汰观察,而是用一个值覆盖它。但是我还没有找到正确的方法。来自文档:

  

要为observable写一个新值,请调用observable并传递   新值作为参数。例如,打电话   myViewModel.personName('Mary')会将名称值更改为'Mary'。

如何按名称写入Knockout observable?

1 个答案:

答案 0 :(得分:2)

observable只是一个setter-getter函数。您可以通过使用值作为参数调用它来为observable分配值。要读取observable的值,可以不带参数调用它。

为了清楚起见,我将使用几个变量。

self.CopyData = function (source, target) {
    var sourceObs, destObs;
    for (var i = 0; i < source.length; i++) {
        sourceObs = self[source[i]];
        destObs = self[target[i]];
        destObs(sourceObs());
    };
};