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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章