[英]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.