[英]Arrays in webservices - Object reference not set to an instance of an object
[英]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)創建一個新對象。 下面的代碼應該做到這一點:-)
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.