javascript - 对象数组的 knockout 映射,对于某些属性使用 'observe'

标签 javascript knockout.js

我想对下面的数组进行深层复制。 结果应该只观察count属性。

 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)
    }]

我尝试了 ko.mapping.fromJS(ko.mapping.toJS(data));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 属性。

最佳答案

您可以避免使用 forEach 并仅观察 count,如下所示:

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

编辑:

根据文档,我们甚至不需要在数据中提及 ko.observable。它应该简单地根据我们的“观察”参数来选择它。因此,也许您可​​能想像这样修改您的数据:

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);

这取决于您想使用哪种方法。

关于javascript - 对象数组的 knockout 映射,对于某些属性使用 'observe',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759642/

相关文章:

javascript - 如何找到 jQuery 事件的原始(匿名函数)来源?

knockout.js - 具有 knockout 的主/详细信息

css - 使用 Knockout js 为 Bootstrap Accordion 菜单绑定(bind)自动生成 Div ID

javascript - 下拉列表显示 [object object] 而不是使用 knockout 的值

javascript - 清除 Knockout 中所有可观察到的绑定(bind)

javascript - 如何在 Blazor 中画一条线?

javascript - TouchEvent/MouseEvent 在 div 中的局部位置

javascript - AJAX 表单未提交或执行任何操作

javascript - Node.js:不能从另一个调用一个 Javascript 原型(prototype)方法?

knockout.js - 无法处理绑定(bind)