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