2013-10-22 142 views
1

假設我有以下Backbone.js的模型之間的數據:和Backbone.js的模型:類型陣列的屬性維護實例

class App.Models.Article extends Backbone.Model 
     defaluts: 
     id: '' 
     name: '' 
     tags: [] 

以顯示其內容的圖。在主視圖中,我通過傳遞新創建的文章創建文章視圖的實例:

v = new App.Views.ArticleView({ model: new App.Models.Article() }) 

並將其呈現給頁面。

在文章視圖和用戶交互的一些標籤是由下面的代碼添加到標籤陣列:

addTag: ->   
     tags = @model.get('tags') 
     tags.push({id: '', name: 'foo'}) 
     tags.push({id: '', name: 'bar'}) 

到目前爲止好!然後關閉文章視圖並渲染另一個視圖。後來我想再次渲染文章視圖,所以代碼:

 v = new App.Views.ArticleView({ model: new App.Models.Article() }) 

再次運行。

的問題是在渲染之後,我仍然可以看到標籤陣列中的先前輸入的標籤,即如果裏面的文章來看,我寫:

 console.log(@model.get('tags')) 

它將輸出兩個對象前加入。我希望每個實例在創建時都有其默認值,而不是沒有更多引用它的地方。有任何想法嗎?任何與Coffescript有關的問題?

P.S.我希望問題陳述足夠清楚:)

+0

甚至在我關閉文章視圖之前,我調用** @ remove **將其刪除並調用** @ model.clear()。set(@ model.defaults)**,仍然是同樣的問題。 –

+0

coffeescript會生成** Article.prototype.defaults = **,它將默認值附加到Article對象的原型。也許問題出在那個地步?! –

+0

不錯的問題,爲什麼coffeescript編譯這樣的東西?!這也會導致任何屬性甚至非數組/對象屬性的問題。 –

回答

0

解決!

的問題是,CoffeeScript的附加默認的原型,以便限定如下的默認設置可以解決該問題:

defaults: -> 
     id: '' 
     name: '' 
     tags: [] 

它再次被附接到原型但作爲一個函數,它返回一個空對象每次通話。

0

不要在默認情況下使用數組和對象,它們將在模型實例中共享。如果你想要標籤爲空數組,那麼在初始化函數中添加。

var MyModel = Backbone.Model.extend({ 
    initialize:function(){ 
     this.set('tags', []) 
    } 
})