0

我对 Backbone (Marionette) 和 jQuery 自定义 DOM 事件有疑问。

我有自定义插件,当changed_currency在文档上触发事件时更新元素的 html 内容。

$(document).on
  changed_currency: ->
    # omitted code
    $(@).html("some html")
, '.currency-change'

这里没有什么花哨的。它适用于不使用 Backbone 的页面。但是,在主干视图中,此代码根本不起作用(未捕获事件)。所以我的问题是,我可以从我的 Backbone 视图中触发自定义事件吗?

骨干代码:

#omitted code
ui: 
   currency_change: '.currency_change'

onRender: () =>
  #omitted code
  @ui.currency_change.trigger('changed_currency')
4

1 回答 1

2

这不起作用,因为该onRender函数是在函数的 Marionette 实现结束时调用的render。该render函数将视图的 HTML 呈现为不属于 DOM 的元素。

直到您将其实际插入到 DOM 中,您的事件处理程序document才会捕获您触发的事件。

如果您正在利用 Marionette 的区域概念,那么您可以通过将trigger调用移至onShow函数来解决您的问题。否则,您需要将trigger调用移动到实际插入view.elDOM 的任何位置之后。

// In view
onShow : function () {
  this.ui.currency_change.trigger('changed_currency');
}

// View instantiation code
var view = new SomeView();
App.someRegion.show(view);
于 2012-11-30T17:58:06.367 回答