Javascript Backbone.js和jquery将单击事件绑定到视图函数

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的函数,但我不想失去调用函数的上下文

我正在使用backbone.js这里是我的场景

假设我有一个名为
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