javascript - Marionette:您可以为触发器和事件使用相同的事件配置吗?

标签 javascript backbone.js marionette

如果我为触发器和事件使用相同的事件配置来设置 Marionette View ,则似乎只有触发器被触发。这是一个简化的示例:单击 .button 应运行 show 并触发 select:something 事件。但是,它仅触发事件。

var MyView = Marionette.CompositeView.extend({
  ui: {
    'button': '.button'
  },

  triggers: {
    'click .button': 'select:something',
  },

  events: {
    'click .button': 'show'
  },

  show: function() {
    // won't fire
  }
});

var view = new MyView({});
view.on('select:something', handleSelect); // will fire

Marionette trigger docs建议将 stopPropogation 设置为 false 会有帮助,但这并没有改变我的行为:

triggers: {
  'click .button': {
    event: "select:something",
    preventDefault: true,
    stopPropagation: false
  }
}, ...

最佳答案

Marionette.View delegateEvents 代码是:

// behavior events will be overriden by view events and or triggers
  _.extend(combinedEvents, behaviorEvents, events, triggers, behaviorTriggers);
  Backbone.View.prototype.delegateEvents.call(this, combinedEvents);

事件将被触发器覆盖,因为事件哈希值在 _.extend 中的触发器哈希值之前。 您可以在事件和触发器哈希中使用不同的键。代码如下:

var viewtemplate = _.template('<button class="button show-btn">show</button>');

var MyView = Marionette.CompositeView.extend({
  template: viewtemplate,
  triggers: {
    'click .button': 'select:something',
  },
  events: {
    'click .show-btn': 'show'
  },
  show: function() {
    console.log('click .show-btn');
  }
});

关于javascript - Marionette:您可以为触发器和事件使用相同的事件配置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120649/

相关文章:

javascript - ReactJS 删除组件

javascript - Electron:如何与浏览器窗口通信?

javascript - 为什么 Marionette ItemView.open 在之前的渲染步骤之后调用 $el.empty() ?

c# - 自定义文本框控件

javascript - 这样的定义是什么意思?

javascript - backbone.js 复杂模型

javascript - 主干模板中的 DOM 元素不响应事件

javascript - Internet Explorer 11 问题 : addEventListener not working

json - 如何使用 Backbone Marionette 处理 JSON 数据中的未定义值

java - Backbone marionette 列出来自服务器的值