1

これには多くの解決策があることを認識していますが、コミュニティの意見はどうなのか疑問に思っていました.

私は一連のモデルとコレクションを持っています。各モデルには、詳細、編集、印刷、脇、ヘルプなどの多数のビューがあります。コレクションには、多くの場合、同じ名前のビューがあります (例: 脇、ヘルプなど)。

私が持っている要件の 1 つは、コードをモジュールで構造化する必要があるということです。モジュールがロードされていない場合、アプリケーションにはモジュールの機能の痕跡がありません。これは、たとえば、ユーザーが他のユーザーを表示、編集などする権限を持っていない場合に発生する可能性があります。したがって、「Users」モジュールはロードされません。

そう...

モデルのビュー定義を格納するのに適した場所は、モデルのコンストラクターであり、コレクションのコンストラクター内のコレクションであると考えました。例えば:

var User = (function(){ // module definition

    // model definition
    var Model = Backbone.Model.extend({
        initialize: function() {
            // ...
        }
    },{
        Views: {
            Details: Backbone.View.extend({
                // ...
            }),
            Aside: Backbone.View.extend({
                // ...
            }),
            Help: Backbone.View.extend({
                // ...
            })
        }
    });

    // collection definition
    var Collection = Backbone.Collection.extend({
        model: Model,
        initialize: function() {
            // ...
        }
    },{
        Views: {
            Aside: Backbone.View.extend({
                // ...
            }),
            Help: Backbone.View.extend({
                // ...
            })
        }
    });

    // add more code here

    return { // make model and collection public
        Model: Model,
        Collection: Collection
    };

})(); // end module definition

自分の意見を別の場所に置くことができることはわかっていますが、このアプローチには、私が気づいていない重大な欠点がありますか? おそらくメモリリークか、あまり目立たない何かでしょうか?

ありがとうございました!

4

2 に答える 2

0

require.jsを見てください。これにより、モジュールのロードを処理するロジックを追加できるはずです。一般的には、まだ見ておく必要があります。特にテキスト プラグインを使用すると、バックボーン アプリケーションを整理するのに最適です。

于 2012-12-04T22:27:04.667 に答える
0

ビューを「クラスメソッド」としてモデルとコレクションに追加しない方がよいと思います。JavaScript のプロトタイプの継承の性質上、実際にはモデル タイプのコンストラクター関数にプロパティほど多くのクラス メソッドを追加することはありません。これがメモリ リークなどの問題を引き起こすかどうかについては、私にはわかりません。

代わりに、この構造を使用するためのリストされていないやむを得ない理由がない限り、ビューを単純なオブジェクトにグループ化するだけの方がよいと言えます。

目標がコードをモジュール化することである場合、require.jsMarionette モジュールなどを利用するか、単に「関連する」コードを IIFE にグループ化します。

メソッドに渡される が正確にどうなるかclassPropertiesについて詳しく知りたい場合は、注釈付きの sourceBackbone.Model.extendを直接見ることをお勧めします。

于 2012-12-05T02:00:25.290 に答える