はい、できます。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);
または、この動作をオーバーライドするモジュールを作成できます。
// 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
、2 番目のモジュールのプロパティがオーバーライドされていることを証明します。
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