我有一个通知工具栏,它是一个模块。非常类似于facebook本机应用程序中的通知工具栏。在此工具栏中有3个区域:
这些区域中的每一个都包含自己的模块(InvitesModule,RequestsModule,NotificationsModule)。但是,每个都具有完全相同的功能:
我可以编写一个模块,比如InvitesModule,让我的另外两个模块扩展该模块,以便我可以覆盖我需要的变量吗?
谢谢,如果我能更清楚,请告诉我
答案 0 :(得分:5)
为什么是的,是的,你可以!虽然Marionette本身并不完全允许您创建“基本模块”,但它允许您修改现有模块。我们在应用程序中利用了这一点来创建我们用于所有模板的ModuleDefaults
定义。以下是它的工作原理:
var ModuleDefaults = {
// Define baseline behavior to share among all modules
definition: function() {
this.foo = 'bar';
this.addInitializer(function() {
console.log(this.moduleName + ': do startup stuff');
});
}
};
现在您可以创建简单实现此行为的模块,如下所示:
// Create a module with the default implementation
App.module('Module1', ModuleDefaults.definition);
或者你可以创建一个覆盖这个bevavior的模块:
// Create another module with the default implementation
App.module('Module2', ModuleDefaults.definition);
// Provide customizations to second module:
App.module('Module2', function() {
// override existing behavior
this.foo = 'baz';
// add new behavior
this.addFinalizer(function() {
console.log(this.moduleName + ': cleanup stuff');
});
});
使用此技术,证明第二个模块的foo
属性被覆盖:
App.start(); // -> Module1: do startup stuff
// -> Module2: do startup stuff
console.log(App.Module1.foo); // -> bar
console.log(App.Module2.foo); // -> baz
App.Module1.stop(); // ->
App.Module2.stop(); // -> Module2: cleanup stuff