2013-05-28 26 views
1

我創建了一個名爲'artist'的骨幹模型和一個名爲'artistView'的骨幹視圖。我可以在我的Chrome devtools網絡標籤中看到它,我成功地獲取了該模型。模型fetch()沒有觸發任何事件

但是,當時fetch並未觸發任何「更改」事件。 奇怪的是,它創建了一個'更改'事件時,它創建模型,但不是當它取得這一個...

我可以在fetch()方法中使用成功回調,但我覺得這是不是最恰當的方式來做到這一點。任何想法 ?

型號&查看初始化:

var artist = new Artist({id: 3}); 
var artistView = new ArtistView({model: artist}); 

然後我取我的模型:

artist.fetch(); 

在我的骨幹View類,我聽 '變' 事件從哪裏來型號:

var ArtistView = Backbone.View.extend({ 

    initialize: function() { 
     this.model.on("change", this.test()); 
    }, 

    test: function() { 
     console.log(this.model.get("name")); 
    } 
}); 

編輯:「sync」事件也不起作用。當我創建模型時,它會觸發一個「同步」事件,但不會在模型成功獲取時觸發。

+2

監聽同步事件。 – Stephen

+0

你是對的同步會更合適。 –

回答

0

問題來自我的事件監聽器。它實際上沒有考慮到上下文。

這裏是解決方案:

this.model.on("sync", this.test, this); 

而且不

this.model.on("sync", this.test()); 
3

您需要使用「sync」事件。

var ArtistView = Backbone.View.extend({ 

    initialize: function() { 
     this.model.on("sync", this.test()); 

    }, 

    test: function() { 
     console.log(this.model.get("name")); 
    } 
}); 

更改僅在屬性更改時觸發。

Docs

編輯thx to stephen。

+0

剛剛測試過,很不幸沒有工作。測試方法在模型創建時被調用,但在成功獲取時不會被調用。瘋狂... – JeremyW

+0

它應該來自我的事件監聽器,因爲我剛剛手動觸發了「同步」事件,並沒有出現。 – JeremyW

+0

下面是解決方案:this.model.on(「sync」,this.test,this); :) – JeremyW