Backbone.js -自定义JQuery事件

dy1byipe  于 2022-11-24  发布在  jQuery
关注(0)|答案(1)|浏览(197)

我在使用Backbone(Marionette)和jQuery自定义DOM事件时遇到问题。
我有自定义插件,当changed_currency事件在文档上触发时,它会更新元素html内容。

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

这里没有什么特别的。它可以在不使用 Backbone.js 的页面上工作。但是,当在 Backbone.js 视图中时,这段代码根本不工作(事件没有被捕获)。所以我的问题是,我可以从我的 Backbone.js 视图内部触发自定义事件吗?
Backbone 网编码:

#omitted code
ui: 
   currency_change: '.currency_change'

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

3bygqnnd1#

因为onRender函数是在render函数的Marionette实现的末尾调用的,所以这是不起作用的。render函数将视图的HTML呈现到一个不属于DOM的元素中。

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

如果你要利用Marionette的区域概念,那么你可以通过将trigger调用移到onShow函数来解决这个问题。否则,你需要将trigger调用移到你实际插入view.el到DOM中的任何地方之后。

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

// View instantiation code
var view = new SomeView();
App.someRegion.show(view);

相关问题