Backbonejs,在调用(resize)事件时更改View上的事件,而无需重新加载或重新呈现页面

t3psigkw  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(164)

我想在调用事件(resize)时更改/修改View模块上的事件侦听器。此目的是用于调整浏览器大小、获得网站的移动的视图以及不刷新页面的功能。在调整大小时,如果检测到断点,我想添加一个事件。我可以这样做吗?

eventOptions = { "click .item" : "onExpand", "click .panel" : "onPanelExpand"};

module.exports = View.extend({
     className: 'results',
     events: eventOptions,
     initialize: function (options) {
        $(window).on('resize', _.bind(this.onResize, this));
     },

     ....
     ....
     onResize: function() {
        // add to this.events
        this.events.add({"click .button": "onClickButton"});
        // refresh events without reloading page
     }

}

先谢谢你!

bmvo0sr5

bmvo0sr51#

如果你看一下backbone.js source code,它有两个功能:

  1. delegateEvents()-将this.events或传递的事件重新绑定到其处理程序
  2. delegate()-将单个事件侦听器添加到视图的元素
    您可以使用以下两种方法之一:
onResize: function() {
    this.events.add({"click .button": "onClickButton"});
    this.delegateEvents();
}

onResize: function() {
    this.delegate("click", ".button", onClickButton);
    // Note: this will not update this.events map and you might need to undelegate to remove
}

但是,一种更简洁的方法是始终将此事件作为原始事件Map的一部分保留在事件处理函数中,您可以决定是执行还是跳过。

相关问题