2012-06-16 71 views
0

我在這裏使用Backbone.js的是我的方案Backbone.js的和jQuery click事件綁定到一個視圖功能

可以說我有一個名爲FooView

class FooView extends Backbone.view 

    initialize:-> 
    $('#manage-foo').bind('click', @render) 

    render: -> 
    //whatever I want to render 

視圖我要綁定的點擊在元素#manage-foo上呈現我的視圖或調用我的視圖FooView的函數,但我不想鬆散調用該函數的上下文,函數render應該用指向FooView的this調用,而不是元素我如何實現這一點。 ?

,我有情況是,我創建頁面加載的FooView,我必須顯示它當一個給元件被點擊

由於

回答

1

bind方法有用於結合方式的方法上下文,而不是註冊事件處理程序。

你應該嘗試是:

class FooView extends Backbone.View 
    events: 
    "click #manage-foo": "render" 
    # this registers @render as the event handler for clicking on the #manage-foo element in the view 

    render: -> 
    # your rendering code 

感謝特雷弗(在註釋)指出你不需要使用_.bindAll結合上下文中的事件定義事件對象了。 (更新代碼以反映這一點)

事件對象中定義的任何事件處理程序都將自動在FooView的上下文中執行。

+0

events對象中聲明的事件自動綁定到視圖。因此,不需要「綁定所有」。 – Trevor

+0

哦對 - 這是在更新的版本中添加的。 –

1

如果#manage-foo是你FooView@el那麼你可以使用骨幹的事件系統子:

class FooView extends Backbone.View 
    events: 
    'click #manage-foo': 'render' 
    #... 

如果#manage-foo是不是你的視圖的元素中,然後events將無法​​正常工作因爲事件處理基於jQuery的delegatedelegate調用附加到視圖的@el。在這種情況下,你應該定義renderfat-arrow (=>),以確保它始終有一個叫權當this

render: => 
    #... 

您還需要一個remove在您的視圖,以避免泄漏的引用您的看法:

remove: -> 
    $('#manage-foo').off('click', @render) 
    Backbone.View::remove.apply(@) 
相關問題