0

我想在我的 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)

这是代码的简化版本,所以如果缺少某些内容,请告诉我,我会更新它。

4

1 回答 1

1

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

不过,您在该代码中有几个问题。您需要解决的是触发事件的原因,您希望在视图上触发而不是在其上触发el;这:

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

应该:

@trigger('update', @)

我也切换@el到 just@以便侦听器可以访问整个视图对象,而不仅仅是它的el.

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

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

如果您使用@update(),那么您将调用@update并将其返回值绑定到"update"事件。您可能还想update粗箭头 ( =>)进行定义:

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

这将在被调用时为您提供正确的@(AKA thisupdate

于 2012-07-23T23:46:46.017 回答