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

时间:2018-04-11 19:32:13

标签: javascript backbone.js event-handling

我想在调用事件(调整大小)时更改/修改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
     }

}

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

  1. delegateEvents() - 重新绑定this.events或将事件传递给其处理程序
  2. delegate() - 向视图元素添加单个事件侦听器
  3. 您可以使用以下任何一种:

    onResize: function() {
        this.events.add({"click .button": "onClickButton"});
        this.delegateEvents();
    }
    

    OR

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

    但是,更简洁的方法是将此事件始终作为原始事件映射和内部事件处理函数的一部分,您可以决定是要执行还是跳过。