在 Backbone.js 中异步添加事件

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

在backbone中,如何基于其他事件异步添加事件。我想允许在某组按钮上使用单击处理程序,但要等到它们的包含按钮被单击后才允许。下面是我目前的设置:

var ProductsView = Backbone.View.extend({

  events : {
        "click .filter-options-container" : "filterOptionContainerClick"
  },

  filterOptionContainerClick: function(e){
    $(e.currentTarget).addClass('active');
    //want to add an event to all .filter-options to allow them to trigger the filterOptionClick function when clicked
  },

  filterOptionClick: function(e){
    $('.filter-option').removeClass('active');
    $(e.currentTarget).addClass('active');
    $('.filter-options-container').removeClass('active');
  }

});

return ProductsView;
7dl7o3gd

7dl7o3gd1#

您可以使用另一种方法,而不是在每次单击容器时都为子按钮添加click处理程序:
1.使用eventsMap注册一次子按钮click处理程序
1.将布尔属性添加到视图以存储容器的状态,单击
1.切换filterOptionContainerClick处理程序中属性
1.取决于属性的值,允许/不允许单击子按钮
因此,代码应如下所示:

var ProductsView = Backbone.View.extend({

    events : {
        "click .filter-options-container" : "filterOptionContainerClick",
        "click .filter-options" : "filterOptionClick" // register sub-buttons' click handlers
    },
    initialize: function() {
        this.enabled = false; // state of the container click
    },

    filterOptionContainerClick: function(e){
        this.enabled = !this.enabled;
        if (this.enabled) $(e.currentTarget).addClass('active');
        else $(e.currentTarget).removeClass('active');
    },

    filterOptionClick: function(e){
        if (!this.enabled) return;
        $('.filter-option').removeClass('active');
        $(e.currentTarget).addClass('active');
        $('.filter-options-container').removeClass('active');
    }

});

相关问题