1

通常、モデルのセットである特定の機能を備えたオブジェクトを作成する必要があることに気づきます。

最後に、コレクションを拡張し、そのモデルで動作する関数を追加します。

例を示したほうがよいと思います:

私のアプリには、ユーザーやプラットフォームのバージョンに関連する一連の権限があります。

var Permissions = Backbone.Collection.extend({
   model: Permission,

   hasAccess: function (moduleCode) {
        ....
   },

   allowAccess: function (moduleCode) {
        ....
   },

   ...

そのメソッドを使用して、アクセス許可 (モデル) のプロパティの形式を変更します。(私のアクセス許可は、アクセス許可の種類を識別する文字列とコードを連結したものです。)

同僚は、それは間違っていると私に言います。.NET でクラスを作成し、プライベート リストを追加して変更を加えます。彼はリストを継承せず、変更します。

彼はモデルを作成し、その中にコレクション プロパティを追加します。

this.set("permissionsCollection", new Backbone.Collection.extend({model: Permission}))

[コメント: 彼がすべてのプロパティを作成する理由がわかりません。彼の場合は不要だと思います。] -> しかし、これは別の質問です。

私は別の方法で考えます。コレクションが内部的にそのリストを持っていることは知っています。Backbone.Collections には大きな可能性がありますが、必要のないモデルを使用する必要があるのはなぜですか? そのカプセル化が必要ない場合...必要ないと思います。私の意見では、彼はオーバープログラミングです。

私が間違っている?BackboneJS Collections の使用方法を知りませんでしたか?

前もって感謝します。

4

1 に答える 1

1

最初はhelper、同様のメソッドで呼び出されたものがありました。

        findAttr: function (model, name) {
            var attrs = model.get('app_attrs');
            if (attrs !== undefined) {
                return this.findByAttrName(attrs, name);
            }
        },
        findByAttrName: function (array, name) {
            return _.find(array, function(a) {
                if (a.attrName === name) {
                    return a;
                }
            });
        }

ビューのコードはもっとぎこちなかった:

        render: function () {
            var attr = helper.findAttr(this.model, 'user');
            ...
            return this;
        }

唯一の論理的な解決策は、これらのメソッドをモデルに移動することでした (this.model上記の場合)。リファクタリング後、次のようになりました。

        render: function () {
            var attr = this.model.findAttr('user');
            ...
            return this;
        }

もちろん、これは以前のソリューションよりも読みやすくなっています。

于 2013-10-01T12:41:03.160 に答える