Javascript Backbone.js和jquery将单击事件绑定到视图函数
我正在使用backbone.js这里是我的场景 假设我有一个名为Javascript Backbone.js和jquery将单击事件绑定到视图函数,javascript,backbone.js,Javascript,Backbone.js,我正在使用backbone.js这里是我的场景 假设我有一个名为FooView class FooView extends Backbone.view initialize:-> $('#manage-foo').bind('click', @render) render: -> //whatever I want to render 我想绑定对元素#manage foo的点击以呈现我的视图或调用我的视图FooView的函数,但我不想失去调用函数的上下文
FooView
class FooView extends Backbone.view
initialize:->
$('#manage-foo').bind('click', @render)
render: ->
//whatever I want to render
我想绑定对元素#manage foo的点击以呈现我的视图或调用我的视图FooView的函数,但我不想失去调用函数的上下文,应该使用指向FooView而不是元素的this
调用函数render
我的情况是在pageLoad上创建FooView,并在单击给定元素时显示它
感谢那里的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(在评论中)指出,您不再需要使用u.bindAll来绑定events对象中定义的事件的上下文。(更新代码以反映这一点)
events对象中定义的任何事件处理程序都将在FooView的上下文中自动执行。其中的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(在评论中)指出,您不再需要使用u.bindAll来绑定events对象中定义的事件的上下文。(更新代码以反映这一点)
events对象中定义的任何事件处理程序都将在FooView的上下文中自动执行。不确定这是否100%回答了您的问题,但
\uuuuu.bindAll(此“呈现”)代码>修复了上下文的丢失。您可以添加所有需要执行此操作的方法,因此可以\uuu.bindAll(这是“渲染,单击”)
并添加一个click方法
不确定这是否100%回答了您的问题,但\uuu.bindAll(这是“渲染”)代码>修复了上下文的丢失。您可以添加所有需要执行此操作的方法,因此可以\uuu.bindAll(这是“渲染,单击”)
并添加一个click方法
如果#manage foo
是您的FooView
的@el
的孩子,那么您可以使用主干网的事件系统:
class FooView extends Backbone.View
events:
'click #manage-foo': 'render'
#...
如果#manage foo
不在视图的元素中,则事件
将不起作用,因为事件处理基于jQuery,并且委托
调用附加到视图的@el
。在这种情况下,您应该使用定义render
,以确保调用时始终具有正确的this
:
render: =>
#...
您还需要在视图中添加一个remove
,以避免泄漏对视图的引用:
remove: ->
$('#manage-foo').off('click', @render)
Backbone.View::remove.apply(@)
如果#manage foo
是您的FooView
的@el
的子级,则您可以使用主干网的事件系统:
class FooView extends Backbone.View
events:
'click #manage-foo': 'render'
#...
如果#manage foo
不在视图的元素中,则事件
将不起作用,因为事件处理基于jQuery,并且委托
调用附加到视图的@el
。在这种情况下,您应该使用定义render
,以确保调用时始终具有正确的this
:
render: =>
#...
您还需要在视图中添加一个remove
,以避免泄漏对视图的引用:
remove: ->
$('#manage-foo').off('click', @render)
Backbone.View::remove.apply(@)
事件对象中声明的事件将自动绑定到视图。因此,无需bindAll
。事件对象中声明的事件将自动绑定到视图。因此,无需bindAll
。