2017-10-15 99 views
0

我想对下面的数组进行深层复制。并且result应该只观察count属性。knockout使用'观察'为某些属性映射对象数组

data = [{ 
     id: 1, 
     code: 'ABC', 
     count: ko.observable(0) 
    },{ 
     id: 2, 
     code: 'JKL', 
     count: ko.observable(5) 
    },{ 
     id: 3, 
     code: 'QWE', 
     count: ko.observable(1) 
    }] 

我试图但idcode也转化为可观。 目前我正在使用下面的代码来获得预期的结果。

var obj = ko.mapping.toJS(data); 
var result = []; 
obj.forEach(function(o){ 
    var obs = ko.mapping.fromJS(o, { 
     'observe': "count" 
    }); 
    result.push(obs); 
}); 
// result will give the expected result 

在这里,我已经使用forEach到回路中的data阵列中的每个对象。有没有办法避免forEach循环?或者如何只观察对象数组中的count属性。

回答

1

可以避开forEach以及仅观察count这样的:

var result = ko.mapping.fromJS(data, {observe: 'count'}); 
console.log(result()); 

编辑

根据该文件,我们甚至不需要提ko.observable在我们的数据。它应该根据我们的'观察'参数简单地选择它。因此,也许你可能要修改data这样的:

var data = [{ 
       id: 1, 
       code: 'ABC', 
       count: 0 
      }, { 
       id: 2, 
       code: 'JKL', 
       count: 5 
      }, { 
       id: 3, 
       code: 'QWE', 
       count: 1 
      }]; 

,然后使用forEach

var result = []; 
data.forEach(function(o){ 
    result.push(ko.mapping.fromJS(o, {observe:'count'})); 
}); 
console.log(result); 

这是给你的,哪种方法你会更喜欢使用。

+0

谢谢雷。 因此,如果我的数据没有observables(如答案中所述),只有第二种方法有效? –

+1

是的,这是正确的 – Ray

相关问题