javascript - ko.mapping observableArray 始终触发订阅

标签 javascript knockout.js knockout-mapping-plugin ko.observablearray

我正在使用 ko.mapping 插件来映射来自 ajax 请求的数据。 设置 key 我希望在这种情况下不会触发订阅,但它总是会引发;我不明白为什么。提前谢谢。

var arraySource = [{ Prop: 1, Prop2: 1 }, { Prop: 2, Prop2: 2 }];
var mappedArray = ko.observableArray([]);
mappedArray.subscribe(function (data) {
    console.log(data);
});
window.setInterval(function () {
    ko.mapping.fromJS(arraySource, {
        key: function (data) {
            return data.Prop;
        }
    }, mappedArray);
}, 3000);

最佳答案

演示:http://jsfiddle.net/xvzAj/

根据文档中的评论,听起来将第三个参数传递给 .fromJS 将覆盖触发通知的数组的属性。

ko.mapping.fromJS(data, {}, someObject); // overwrites properties on someObject

来源:http://knockoutjs.com/documentation/plugins-mapping.html

在knockout.mapping.js ln 627中,数组内容被替换,从而触发订阅通知。

mappedRootObject(newContents);

https://github.com/SteveSanderson/knockout.mapping/blob/master/build/output/knockout.mapping-latest.debug.js

关于javascript - ko.mapping observableArray 始终触发订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24699722/

相关文章:

javascript - 如何通过单击元素外部来关闭元素?

javascript - ng-change 不触发

javascript - knockout.js 并修复了元素上的左滚动绑定(bind)

javascript - knockout : extending mapping to complex JSON

javascript - 静态 Promise.resolve()/reject() 始终被解释为resolve()

javascript - KnockoutJs - 如何将数据表与现有绑定(bind)表一起使用

javascript - 将某些 observableArray 对象属性转换为 observable

Knockout.js 将 JSON 对象映射到 Javascript 对象

javascript - Knockout映射插件[create,update]: objects created,无法更新

javascript - 如何将 Google Drive API 的 data-src 分配给 HTML 中的 Canvas