gpt4 book ai didi

javascript - 如何扩展 MarionetteJS 模块以减少代码重复

转载 作者:行者123 更新时间:2023-11-30 08:50:19 24 4
gpt4 key购买 nike

我有一个通知工具栏,它是一个模块。非常类似于 facebook native 应用程序中的通知工具栏。在此工具栏中有 3 个区域:

  • 邀请地区
  • 请求区域
  • 通知区域

其中每个区域都包含自己的模块(InvitesModule、RequestsModule、NotificationsModule)。但是,每个都具有完全相同的功能:

  • 检查服务器是否有新的(邀请|请求|通知)
  • 如果找到,更新相关区域
  • 然后是一大堆其他功能(点击弹出collectionView等等)

我可以编写一个模块,比如 InvitesModule,然后让我的其他两个模块扩展该模块,这样我就可以覆盖我需要的变量吗?

谢谢,请告诉我是否可以更清楚

最佳答案

为什么是的,是的,你可以!虽然 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 属性被覆盖:

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

关于javascript - 如何扩展 MarionetteJS 模块以减少代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com