在Backbone.View中收听子事件

时间:2012-07-23 23:39:30

标签: javascript backbone.js coffeescript backbone-events

我想在Backbone.View中听一个关于孩子的事件。我认为这是正确的方法,但我不确定。未调用父级中的更新功能。谢谢您的帮助。

text.js.coffee

class App.Views.Text extends Backbone.Views

  initialize: ->
    @_styleToolbar = App.Views.StyleToolbar el: $("#style_toolbar")
    @_styleToolbar.on("update", @update())

  update: ->
    # update text color, font etc

style_toolbar.js.coffee

class App.Views.StyleToolbar extends Backbone.Views
  'change .font_face select' : 'update'

  update: (e) ->
    $(@el).trigger('update', @el)

这是代码的简化版本,所以如果有什么遗漏请告诉我,我会更新它。

1 个答案:

答案 0 :(得分:1)

没关系,Backbone视图混合Backbone.Events是有原因的。

但是,您在该代码中遇到了一些问题。你需要修复的是触发事件的内容,你想要在视图而不是el上触发;这样:

$(@el).trigger('update', @el)

应该是:

@trigger('update', @)

我还将@el切换为@,以便侦听器可以访问整个视图对象,而不仅仅是el

并且,侦听器应该绑定一个函数而不是函数的返回值:

@_styleToolbar.on("update", @update)

如果您使用@update(),那么您将调用@update并将其返回值绑定到"update"事件。您可能还希望使用fat-arrow (=>)定义update

update: (toolbar) =>
  # update text color, font etc

在调用@时,这将为您提供正确的this(AKA update)。