在VIEW(事件从另一个库)自定义事件Backbone.js的?(Backbone.js with

2019-10-28 15:25发布

所以我用steroids.js和图书馆为我提供了这个事件:

document.addEventListener("visibilitychange", onVisibilityChange, false);

function onVisibilityChange() {

}

这工作如果我只是把它放在我的JS文件,但如何在与Backbone.js的视图翻译? 我如何与框架实现这一点? 我试图在初始化函数。对,但它似乎并没有工作。

Answer 1:

1 -使用document作为一个元素:

var DocumentEventsView = Backbone.View.extend({
  el : document,
  events : {
    'visibilitychange' : 'onVisibilityChange'
  },
  onVisibilityChange : function () {
    console.log('inside onVisibilityChange');
  }
});

// test
new DocumentEventsView();
$(document).trigger('visibilitychange');

2 -使用自定义el

var DocumentEventsView = Backbone.View.extend({
  initialize : function () {
    $(document).on('visibilitychange', _.bind(this.onVisibilityChange, this));
  },
  onVisibilityChange : function () {
    console.log('inside onVisibilityChange');
  }
});

// test
new DocumentEventsView();
$(document).trigger('visibilitychange')


Answer 2:

如果视图有document作为view.el ,那么你可以听使用自定义DOM事件events哈希 。

如果没有,那么你可以手动在听取事件initialize方法。

initialize: function() {
    $(document).on("visibilitychange", _.bind(this.hanldeVisibility, this));
}

这将工作,因此,如果没有你,也可以是一个竞争条件(检查任何异步行为等)。

在一个重要的方面说明。 这是非常重要的,一旦你的看法被删除,清除定制绑定事件。 这通常是处理是这样的:

remove: function() {
    Backbone.View.prototype.remove.call(this);
    $(document).off("visibilitychange");
}

如果你不清理后您的活动,您将创建内存泄漏。 而这最终可能会引起程序崩溃。



文章来源: Backbone.js with custom events in VIEW (events from another library)?