Ember copy array

来源:互联网 发布:宏杰软件 编辑:程序博客网 时间:2024/06/04 23:21

Ember 不支持深度Copy

                var dpItemDataCopy = Ember.makeArray(dpItemData);                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);                delete dpItemDataCopy[0].links;                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);

console的结果简略给出

Object Object undefinedundefined

我只删除Copy后数组第一个Object的links,但原始数组的第一个Object的links也被删除掉;

                var dpItemDataCopy = Ember.makeArray(dpItemData);                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);                delete dpItemDataCopy[0].links;                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);

既然copy不管用,换makeArray试试,但是结果还是一样的;
网上讲这是Ember的一个bug

最后解决办法

                var dpItemDataCopy = dpItemData.map(function(item) {                    return Ember.copy(item, true)                });                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);                delete dpItemDataCopy[0].links;                console.log(dpItemData[0].links);                console.log(dpItemDataCopy[0].links);

console结果

    Object    Object    Object    undefined

结论

  • Ember copy和makeArray不支持deep复制数组
  • 若想要真正copy一个数组,可以采用上面的方式,Ember后续应该会给出新的api

参考

http://stackoverflow.com/questions/9693154/native-array-in-emberjs-does-not-support-deep-copy

0 0