0

我有一個模型,其中包含集合。在我的Web應用程序中,我有一個項目模型,並且我有一個名爲「協作者」的屬性,這個屬性實際上是一組用戶。骨幹嵌套集合模型偵聽添加

在我看來,我有以下的初始化,

this.model.get('collaborators').on('change', alert("!!"), this);

當視圖首創的負載,我得到一個警告,firther到視圖我有一個事件,將觸發以下,

var newModel = new app.User({ id: this.clickedElement.data('userId') }); 
       console.log(this.model.get(this.formSection)); // shows that the collection has 4 models 
       newModel.fetch({ 
        success: function() { 

         that.model.get(that.formSection).add(newModel); 
         console.log(that.model.get(that.formSection)); //shows that the collection has 5 models 

        } 

       }); 

正如你在上面的代碼中看到的那樣,我正在記錄我的合作者集合,它顯示了長度爲4,在成功方法中獲取後,我是否添加了剛剛提取到該集合的模型,然後記錄收藏再次,這次它返回的長度爲5.

這對我來說意味着添加成功,那麼「添加」事件偵聽器在初始頁面視圖之後不會觸發嗎?

+0

我沒有看到一個'add'監聽器。只有一個'change' - 但那是你的合作者收集。集合不會觸發'change'事件,我不確定它是否會冒泡到父模型。 – Lix 2014-08-28 09:48:04

+0

即使我做'this.model.get('collaborators')。on('add',alert(「!!」),this);'它只會觸發視圖的初始加載,而不會在向集合中添加更多數據時使用。 – Udders 2014-08-28 09:53:13

+0

您是否嘗試過僅在父模型中使用'change'事件? – Lix 2014-08-28 09:57:43

回答

0

麻煩的是,你應該通過一些函數作爲on方法的第二個參數。但是,您在事件綁定時刻正確觸發alert,並通過alert的結果而不是功能。 這應該正常工作:

this.model.get('collaborators').on('change', function(){ 
    alert("!!"); 
}); 

更新:但是你應該清楚你想趕上哪些事件。您可以通過在backbone.js文件中啓動trigger方法調用的搜索來查找在提取(或任何其他進程)期間觸發的所有事件。

更新:您也可以使用此代碼來捕獲所有觸發事件的:

collaborators.on('all', function(){ 
    /** 
    * `arguments` object contains all of arguments passed to the function. 
    * @see http://backbonejs.org/#Events-on for more details about `all` 
    * catching. 
    */ 
    console.log(arguments); 
}); 
0

當您有約束力,合作者變化時,你應該使用骨幹listenTo事件。

this.listenTo(this.model.get('collaborators'), "change", function(){alert("!!"), this); 

http://backbonejs.org/#Events-listenTo

使用this.listenTo的優點是當視圖被關閉/刪除,骨幹將自動調用this.stopListening導致您的視圖自動取消綁定事件。這將幫助您清理事件並防止幻影視圖。

http://backbonejs.org/#Events-stopListening