Marionette.js 行为可以触发事件吗?
Can a Marionette.js Behavior trigger an Event?
我在 Marionette 中有一个行为,用于处理检测滑动事件的逻辑。我的每个子视图都包含此行为以了解它们何时发生滑动手势。我的问题是,一旦我的 Behavior 确定发生了滑动,它如何将此信息发送到它的 View?
如果行为可以触发一些可以监听的事件,而不是通过其相应的视图,而是通过布局视图(父视图),那就更好了。
这种事情可能吗?谢谢!
这绝不是唯一的解决方案,而是一种非常木偶的方法。使此解决方案成为可能的两个要素是
Layout.childEvents
的Marionette2.4.0中的介绍。 LayoutView 的子视图中触发的事件将使用 LayoutView.childEvents.
冒泡到父 LayoutView
- 每个行为都有一个对其附加的视图实例的引用。我们可以从 行为
中触发此视图的事件
这就是我的想法。首先让我们设置我们期望行为在 LayoutView 中发出的事件。
Marionette.LayoutView.extend({
// This callback will be called whenever a child emits a `view:swipe` event
childEvents: {
'view:swipe': 'onChildSwipe'
}
});
然后,我们在Behavior中设置swipe handler来触发事件在它所在的instance view上。这个事件会先命中view,然后会继续冒泡直到 LayoutView.onChildSwipe
将处理事件的 LayoutView。
Marionette.Behavior.extend({
handleSwipe: function(e) {
// Do processing...
this.view.trigger('view:swipe', data);
}
});
您的 LayoutView 中可能有多个子视图,并且您可能希望以不同方式处理滑动。如何识别视图有很多方法。最一般的,就是在trigger中发送view,所以可以这样修改上面的handleSwipe
,
handleSwipe: function(e) {
// Do processing...
this.view.trigger('view:swipe', this.view, data);
}
和您的 LayoutView.onChildSwipe
将负责识别视图(例如通过查看其 model.id
)并采取相应的行动。
我在 Marionette 中有一个行为,用于处理检测滑动事件的逻辑。我的每个子视图都包含此行为以了解它们何时发生滑动手势。我的问题是,一旦我的 Behavior 确定发生了滑动,它如何将此信息发送到它的 View?
如果行为可以触发一些可以监听的事件,而不是通过其相应的视图,而是通过布局视图(父视图),那就更好了。
这种事情可能吗?谢谢!
这绝不是唯一的解决方案,而是一种非常木偶的方法。使此解决方案成为可能的两个要素是
Layout.childEvents
的Marionette2.4.0中的介绍。 LayoutView 的子视图中触发的事件将使用LayoutView.childEvents.
冒泡到父 LayoutView
- 每个行为都有一个对其附加的视图实例的引用。我们可以从 行为 中触发此视图的事件
这就是我的想法。首先让我们设置我们期望行为在 LayoutView 中发出的事件。
Marionette.LayoutView.extend({
// This callback will be called whenever a child emits a `view:swipe` event
childEvents: {
'view:swipe': 'onChildSwipe'
}
});
然后,我们在Behavior中设置swipe handler来触发事件在它所在的instance view上。这个事件会先命中view,然后会继续冒泡直到 LayoutView.onChildSwipe
将处理事件的 LayoutView。
Marionette.Behavior.extend({
handleSwipe: function(e) {
// Do processing...
this.view.trigger('view:swipe', data);
}
});
您的 LayoutView 中可能有多个子视图,并且您可能希望以不同方式处理滑动。如何识别视图有很多方法。最一般的,就是在trigger中发送view,所以可以这样修改上面的handleSwipe
,
handleSwipe: function(e) {
// Do processing...
this.view.trigger('view:swipe', this.view, data);
}
和您的 LayoutView.onChildSwipe
将负责识别视图(例如通过查看其 model.id
)并采取相应的行动。