2012-06-12 58 views
1

我正在通過教程學習backbone.js。我嘗試了一些代碼,看起來很奇怪。我首先初始化了一個模型實例,其中srcthesource.jpg,模型實例爲console.log,然後將src屬性設置爲aaa,後面跟着console.log在backbone.js中設置模型的屬性值

在javascript控制檯中,我看到對於兩個輸出,src是相同的aaa。他們不應該是不同的?

JS代碼

var Photo = Backbone.Model.extend({ 
    defaults: { 
     src: 'placeholder.jpg', 
     title: 'An image placeholder', 
     coordinates: [0, 0] 
    }, 

    initialize: function() { 
     this.bind("change:src", function() { 
      var src = this.get("src"); 
      console.log('Image source updated to ' + src); 
     }); 
     console.log('This model has been initialized!'); 
    }, 

    changeSrc: function(source) { 
     this.set({src: source}); 
    } 
}); 

window.myPhoto = new Photo({title: "My awesomeness", 
         src: "thesource.jpg", 
         location: "Boston", 
         tags: ['big game', 'vacation']}); 

console.log(myPhoto.attributes); 
myPhoto.set({src:'aaaa'}); 
console.log(myPhoto.attributes); 

控制檯輸出

enter image description here

回答

1

當你在谷歌瀏覽器登錄的對象,當你展開控制檯它們的屬性,而不是他們的狀態檢索當你登錄他們。

你可以嘗試登錄克隆:

console.log(JSON.parse(JSON.stringify(myPhoto.attributes))); 
myPhoto.set({src:'aaaa'}); 
console.log(JSON.parse(JSON.stringify(myPhoto.attributes))); 
+0

真的很棘手,謝謝! – Nyxynyx

1

上述工程的答案,但我只想指出,骨幹有做這基本上已經功能。您可以使用toJSON,它克隆所有屬性並返回一個對象。

console.log(myPhoto.toJSON()); 
myPhoto.set({src: 'aaaa'}); 
console.log(myPhoto.toJSON()); 

這將顯示一個淺拷貝,所以它不是完全一樣,但它的打字比較少,並會還在你正在尋找的情況下工作。

相關問題