[英]Backbone.js and jquery binding click event to a view function
我正在使用骨干.js這是我的情況
可以說我有一個名為FooView
class FooView extends Backbone.view
initialize:->
$('#manage-foo').bind('click', @render)
render: ->
//whatever I want to render
我想綁定元素#manage-foo上的單擊以呈現我的視圖或調用我的視圖FooView的函數,但是我不想丟失調用該函數的上下文,應該使用this
指針來調用函數render。到FooView而不是元素。如何實現此目的。 ?
我遇到的情況是,我在pageLoad上創建了FooView,並且在單擊Give元素時必須顯示它。
謝謝
不知道這是否能100%回答您的問題,但_.bindAll(this, 'render');
解決上下文丟失的問題。 您可以添加需要使用的所有方法,因此可以_.bindAll(this, 'render,click');
並添加點擊方法。
那里的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
感謝Trevor(在評論中)指出,您不再需要使用_.bindAll綁定事件對象中定義的事件的上下文。 (更新了代碼以反映這一點)
事件對象中定義的任何事件處理程序都將在FooView上下文中自動執行。
如果#manage-foo
是你的孩子FooView
的@el
那么你可以使用骨干的事件系統:
class FooView extends Backbone.View
events:
'click #manage-foo': 'render'
#...
如果#manage-foo
不在視圖的元素內,則events
將不起作用,因為事件處理基於jQuery的delegate
,並且delegate
調用已附加到視圖的@el
。 在這種情況下,你應該定義render
與脂肪箭頭( =>
,以確保它始終擁有正確this
調用時:
render: =>
#...
您還需要在視圖中進行remove
,以避免泄漏對視圖的引用:
remove: ->
$('#manage-foo').off('click', @render)
Backbone.View::remove.apply(@)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.