2015-02-23 144 views
0

開始學習Backbone JS。閱讀Codeschool文檔。我只是不明白爲什麼我們需要在initialize中聲明this.model.on('....'),而不是在toggleStatus函數中只使用'this.render();'。請有人解釋清楚。爲什麼我們不能在togglestatus函數中聲明this.render?

下面是代碼從我的文檔複製粘貼:

前:

var TodoView = Backbone.View.extend({ 

    events: { 
     'change input': 'toggleStatus' 
    }, 

    toggleStatus: function(){ 
     this.model.toggleStatus(); 
     this.render(); //Doesn’t work for other model changes , WHY IT DOESN'T WORK?? 
    }, 

    render: function(){ 
     this.$el.html(this.template(this.model.toJSON())); 
    } 

    } 
}); 

後:

var TodoView = Backbone.View.extend({ 

    events: { 
    'change input': 'toggleStatus' 
    }, 

    initialize: function(){ 
     this.model.on('change', this.render, this); 
    }, 

    toggleStatus: function(){ 
     this.model.toggleStatus(); 
    }, 

    render: function(){ 
     this.$el.html(this.template(this.model.toJSON())); 
    } 

}); 

回答

0

我沒有看過的文章儘管

首先,爲什麼this.render不適用於其他模型更改只是因爲當調用toggleStatusBefore代碼中只有時間輸入更改事件觸發。

所以流動是像...

  1. 用戶更改輸入字段值。

  2. this.events接收該事件,並呼籲toggleStatus,然後this.render被稱爲toggleStatus

After

,要調用model.on這是一個函數來設置一個偵聽器模型事件和toggleStatus內被設置爲它的回調函數。

因此,流程會...

1.Whenever模式得到改變,model.on獲取事件和回調函數this.render被調用。

這意味着whenver模特屬性得到任何的改變,this.render是called.and由於change input電話toggleStatus這使得該模型的變化(我不知道,因爲你沒有把它的代碼,但我幾乎可以肯定這件事),輸入的變化最終會調用this.render(以及任何其他模特屬性改變this.render太話費)

阿姨,我認爲文章是有點老,因爲model.on不適合使用了更好的使用listenTo取而代之。因爲model.on很難解除事件並且它使得殭屍視圖很容易。

查看更多信息http://backbonejs.org/#Events-listenTo

相關問題