簡體   English   中英

灰燼設置為對象和數組

[英]Ember set for Object and arrays

在灰燼中

var Test = Ember.Object.create({
name: "Ember",
changeableName: "",
resetName: function() {
this.set('changeableName', this.get('name'));
}
});

Test.resetName();
Test.get('changeableName');      // Ember
Test.get('name');      // Ember
Test.set('changeableName', "Ember Test");      
Test.get('changeableName');      // Ember Test
Test.get('name');      // Ember

這運作良好,並且是預期的行為。

但是,如果我以這種方式使用對象或數組,它會將更改反映回原始屬性,

var Test = Ember.Object.create({ 
nameObj: {"name":"Ember"}, 
changeableName: {}, 
resetName: function() { this.set('changeableName', this.get('nameObj')); } 
});

Test.resetName(); 
Test.get('changeableName.name');      // Ember 
Test.get('nameObj.name');      // Ember 
Test.set('changeableName.name', "Ember Test");       
Test.get('changeableName.name');      // Ember Test 
Test.get('nameObj.name');      // Ember Test

這不公平。 我不希望更改反映回原始對象。Ember.set對於原始類型很好,但對於對象和數組,則不是我想要的。

這種情況下有什么解決方法嗎?

我不會說這是不公平的。 這正是對象和對象引用的工作方式 :-)

這是您基本上要執行的操作:

  • 有一個屬性,其中包含可以修改的對象。
  • 有一個重置函數,該函數應將上述屬性重置為某種模板對象(= nameObj)中指定的值。

但是這是您在代碼中執行的操作:

  • 屬性changeableName設置為指向nameObj。
  • 您在對象上進行更改。
  • 再次將屬性changeableName設置為指向nameObj。

您看到問題了嗎? 您必須調整重置功能,以始終根據您的“模板對象”(nameObj)創建一個新對象。 下面的代碼應該做到這一點:-)

var Test = Ember.Object.create({ 
nameObj: {"name":"Ember"}, 
changeableName: {}, 
resetName: function() {
  var hash = this.get('nameObj');
  this.set('changeableName', Ember.Object.create(hash)); 
} 
});
Test.resetName(); 
Test.get('changeableName.name');      // Ember 
Test.get('nameObj.name');      // Ember 
Test.set('changeableName.name', "Ember Test");       
Test.get('changeableName.name');      // Ember Test 
Test.get('nameObj.name');      // Ember

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM