2013-10-17 16 views
1

在灰燼的性質,這是我做的:灰燼的Object.create()的最後一個實例

我宣佈這些對象

MyObject = Ember.Object.extend({ 
    //some serialization logic 
}); 

FormViewContainer = MyObject .extend({ 
    type: "FormViewContainer", 
    label: "", 
    options: { 
     css: "", 
     class: "", 
     attr: [] 
    }, 
    items:[] 
}); 

FormViewField = MyObject.extend({ 
    type: "FormViewLibreField", 
    isCodif: false, 
    question: {}, 
    answer: undefined, 
    options: { 
     css: "", 
     class: "", 
     attr: [] 
    } 
}); 

然後在我的應用程序:

var cont = FormViewContainer.create({ 
      label: "My Label", 
      options: { 
       class: "cssclassestuff" 
      } 
     }); 

Data.Questions.forEach(function (c) { 
      var field = FormViewField.create(); 
      field.set("question",c); 
      cont.get('items').push(field); 
     }); 

//items are in the array, they are 6! 
cont.get('items').length == 6 

這就是我沒有得到的部分。我創建了一個新的實例(據說),但我

FormViewContainer.create().get('items').length == 6 

的Object.create()實際上是通過我的對象構造複製從另一個實例項目到這個新的!

它只複製「items」屬性,標籤和選項不受影響。

我試着分配帶有/沒有get/set訪問器的屬性,並得到了相同的結果。

如果有人有想法?

回答

3

Ember有這個奇怪的問題(?)/實現。定義爲數組的任何東西都在這些實例之間共享。

FormViewContainer = MyObject .extend({ 
    type: "FormViewContainer", 
    label: "", 
    options: { 
     css: "", 
     class: "", 
     attr: [] 
    }, 
    items:[] 
}); 

做這個

FormViewContainer = MyObject .extend({ 
    init: function(){ 
     this._super(); 
     this.items = []; 
    }, 
    type: "FormViewContainer", 
    label: "", 
    options: { 
     css: "", 
     class: "", 
     attr: [] 
    }, 
    items:null 
}); 
+0

我在平均時間排序這個問題,以及通過創建在創建對象的屬性。謝謝! – Jmorvan

+0

它是有道理的,因爲第一個例子中的數組實例放在原型上,所以它可用於類的所有實例。 – ahaurw01

+0

ahaurw01,現在我想到了,這是非常有意義的。我來自C族世界,所以原型有點難以使用。雖然我不太肯定爲什麼原型上的其他字符串/對象等不是「共享」字符串/對象。 – Kingpin2k