1

次のバックボーン アプリケーション構造を検討してください。

AppView
    Subview
        FirstSubviewInQuestion
    Subview
        Subview
            SecondSubviewInQuestion

アプリケーション ビューは、特別なアイテムのコレクションを作成して保存します。ある時点で、最初と 2 番目のサブビューがそのコレクションにアクセスする必要があります。コレクションを彼らに渡す最良の方法は何ですか?

私自身、いくつかの方法を見ていますが、それぞれに欠点があります。

1) App View 内ではなく、さらにグローバルにそのコレクションのインスタンスを作成し、それを依存関係として渡します (プロジェクトは RequireJS を使用するため、AppView と両方のサブビューに渡されます)。欠点: アプリ ビューは、アプリケーションの最上位の要素であると想定されています。しかし突然、コレクションのいくつかのインスタンスが上に浮かんでいます。

2)または、次のことができます:

// some subview
var collection = {};
Backbone.trigger( "item:getSpecialItems", collection);
// now the collection has data

// app view
this.listenTo( "item:getSpecialItems", function(obj) {
    // copy collection to passed object
    _.extend(obj, this.specialCollection);
});

欠点: グローバルなイベントをトリガーしています。アプリ ビューのみが応答することはわかっていますが、設計が悪いように感じます。さらに、コレクションを渡すこの方法はハックのようです。

たぶん、それを行うための他の賢い方法がいくつかありますか?

4

2 に答える 2

1

私は#1と言います。

アプリビューは、アプリケーションの最上位の要素であると想定されています

そうですね、でもあなたは (私が思うに) aCollectionではなく aについて話しているのViewです。この 2 つは、アプリケーションの完全に別の部分です (MVC では、最初は「M」で、2 番目は「V」です)。定義上、ビューがデータによって駆動される場合、データはどのビューよりも (依存関係ツリーで) 「上位」にある必要があるため、そのアプローチに問題はないと思います。

于 2013-04-01T21:45:42.817 に答える
1

あなたの目標がコレクションの共有インスタンスを取得することである場合、私のアプローチはそれを親から「サブビュー」に、サブビューからその子に渡すことです。ただし、このコレクションのシングルトンを渡すために必ずしも require を使用するとは限りません。

また、「特別なオブジェクトの作成と保存」のための特別なメソッドに関するすべてのロジックをビューから引き出して、唯一のドメインがこれだけのヘルパー クラスにすることもできます。そのヘルパーは、ビュー階層の外から、おそらくグローバルに、またはrequire経由で利用できるユーティリティになります。

于 2013-04-02T00:55:53.350 に答える