1

モジュールである通知ツールバーがあります。Facebook ネイティブ アプリの通知ツールバーに非常に似ています。このツールバーには 3 つの領域があります。

  • 招待地域
  • リクエスト地域
  • 通知地域

これらの各リージョンには、独自のモジュール (InvitesModule、RequestsModule、NotificationsModule) が含まれています。ただし、それぞれの機能はまったく同じです。

  • サーバーで新しいものを確認します (招待|リクエスト|通知)
  • 見つかった場合は、関連付けられたリージョンを更新します
  • そして、他の多くの機能 (クリックして collectionView をポップアップするなど..)

InvitesModule などの 1 つのモジュールを作成し、他の 2 つのモジュールでそのモジュールを拡張して、必要な変数を上書きできるようにすることはできますか?

ありがとう、もっと明確にできるかどうか教えてください

4

1 に答える 1

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);

または、この動作をオーバーライドするモジュールを作成できます。

// 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
于 2013-08-29T05:34:03.970 に答える