2014-02-25 133 views
0

我首先跳入骨干,牵线木偶,下划线和这个项目需要。我只是看了一个很棒的视频,演讲者解释了木偶的一个好处就是能够拥有一个应用程序对象委托事件监听器和触发器,以便您的代码可以真正模块化。骨干牵线木偶事件调度

如果这实际上是可行的,我没有把它做好,我很难在网上找到任何示例,我想因为它是一个相对年轻的图书馆。

这里是什么,我试图完成一个相比下来例如:

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任意位置单击,我得到的警报。现在,我知道我没有正确地传递对象,但这是我混乱的一部分。我认为我应该使用一个牵线木偶扩展视图而不是骨干视图。

所以我的基本问题是,如何在backbone/marionette应用程序中编写模块,以便各个视图可以通告事件,然后由“主”应用程序对象将模块发送到正在侦听该事件的模块?

回答

2

尝试使用木偶观点:(另外,你需要在某个时候显示视图)

var NavBar = Marionette.ItemView.extend({ 
    // ... 
}); 

您还可以看到在前进的代码是一个例子我book on Marionette

您可以在http://davidsulc.github.io/marionette-gentle-introduction/#contacts

+0

我经历了几个你的例子阅读在行动中看到的应用程序,我知道我应该添加对象为应用对象的孩子,像'应用.NavBar = Marionette.ItemView.extend({});'如果所有'ItemViews'都是Application对象的子对象,我应该使用'vent'方法,还是需要创建一个'EventAggregator'对象来使用App一个事件调度员? – aviemet

+0

您不一定需要将所有内容附加到应用程序对象本身,只是没有将对象作为全局变量。此外,Marionette应用程序将拥有一个已经可用的事件聚合器(使用'MyApp.trigger(...)'和'MyApp.on(...)'),但是如果您愿意,您可以创建自己的事件聚合器。 –