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