2012-12-26 42 views
55
之間的區別

我正在嘗試學習他們在Backbone 0.9.9中所做的新更改。Backbone 0.9.9:ListenTo和

目前我有問題要了解listenToon之間的區別:

listenTo

var View = Backbone.View.extend({ 

    tagName: "div", 

    intialize: function() { 
     this.listenTo(this.model, 'change', this.render); 
    }, 

    render: function() { 
     this.$el.empty(); 
     this.$el.append('<p>hello world</p>'); 
    } 

}); 

var View = Backbone.View.extend({ 

    tagName: "div", 

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

    render: function() { 
     this.$el.empty(); 
     this.$el.append('<p>hello world</p>'); 
    } 

}); 

我聽說listenTo允許無線th stopListening可以取消訂閱所有事件,例如視圖被移除以避免內存泄漏。

這是唯一的原因嗎?

+0

可能重複的[Backbone js .listenTo vs .on](https://stackoverflow.com/questions/16823746/backbone-js-listento-vs-on) –

回答

40

listenTostopListening基本上來自社區。它們有助於更容易地綁定和解除綁定事件。

圍繞這個想法有很多現有的文檔和博客文章,包括我在這方面寫過的東西。

約翰尼奧希卡是我看到使用這種技術的第一人。它最初被張貼在回答一個問題的StackOverflow這裏:Backbone.js : repopulate or recreate the view?

您可以讀到我寫這個,在這裏:

+0

我剛剛也瞭解到這一點,所以這是一個及時的問題給我。建議的做法是現在使用listenTo來綁定可能需要在應用生命週期的某個時間點解綁的所有事件? – user1031947

+12

這是一個很好的問題,可以直接回答 – ErichBSchulz

+0

@ErichBSchulz同意,儘管沒有提到listenTo在3個博客文章中提到過,我猜@DerickBailey說是的,在' on'。 – AJP

53

當您創建視圖時,兩個listenToon添加事件處理。但是,當視圖被破壞時,listenTo調用將會是automatically remove the event handler。這個prevents memory leaks和殭屍事件監聽器。

因此,如果您想自己管理處理程序,請使用on。請確保致電off。否則,請致電listenTo