我首先进入主干、 Marionette 、下划线和这个项目的需求。我刚刚观看了一段很棒的视频,其中演讲者解释了 marionette 的一个好处是能够让应用程序对象委托(delegate)事件监听器和触发器,以便您的代码可以真正模块化。
如果这实际上是可能的,我就没有做对,而且我很难在网上找到任何示例,我想因为它是一个相对年轻的库。
这是我想要实现的目标的简化示例:
var App = new Marionette.Application();
App.start();
var NavBar = Backbone.View.extend({
el: '#nav',
initialize: function () {},
events: {
'click': 'fireOff'
},
fireOff: function () {
App.vent.trigger('trigger');
}
});
var NavBar = new NavBarView({});
App.vent.on('trigger', function () {
alert('something');
});
我期望这里发生的是,当我单击 #nav 中的任意位置时,我会收到警报。现在,我意识到我没有正确传递对象,但这是我困惑的一部分。我认为我应该使用 Marionette 扩展 View 而不是主干 View 。
所以我的基本问题是,如何在 Backbone /Marionette 应用程序中编写模块,以便各个 View 可以广告事件,然后由“主”应用程序对象将其分派(dispatch)到正在监听该事件的模块?
最佳答案
尝试使用 Marionette View :
var NavBar = Marionette.ItemView.extend({
// ...
});
(此外,您需要在某个时刻显示 View 。)
您还可以在我的 book on Marionette 附带的代码中看到一个示例。 :
- View 在此处触发事件:https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/common/views.js#L12
- 在此处捕获并传播:https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/edit/edit_controller.js#L19
您可以在http://davidsulc.github.io/marionette-gentle-introduction/#contacts查看正在运行的应用程序
关于javascript - Backbone Marionette 事件调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22005210/