Ember copy array

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 
undefined
undefined

我只删除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

posted @ 2015-09-15 20:08  peng_gy  阅读(109)  评论(0编辑  收藏  举报