1

モデル内のメソッドを使用してコレクション内にコレクションを追加する必要があるバックボーン アプリがあります。コレクションにメソッドを挿入しようとしましたが、要素を追加できません。コレクション内の他のアプリ内に追加したいアプリ外の要素をクリックすると、アプリのコレクションを作成したいと思います。

これは私のアプリです: モデル:

define(['backbone', 'collections/element'],function(Backbone, ElementCollection){
    var DesignModel = Backbone.Model.extend({
        initialize:function(){
            console.log('Initialized Design model');
            _.defaults(this, {
                elements: new ElementCollection()
            });
        },
        addElement: function(elements, options) {
            return this.elements.add(elements, options);
        }
    });

    return DesignModel;
});

コレクション:

define(['backbone', 'models/design'], function(Backbone, DesignModel){

    var designCollection = Backbone.Collection.extend({
        model: DesignModel,
    });

    return designCollection;
});

意見

define(['jquery' , 'backbone', 'models/design', 'collections/design', 'views/element'], 
    function($, Backbone,  DesignModel, DesignCollection, ElementView){
    var DesignView = Backbone.View.extend({
        el:$('#page'),

        initialize: function(){
            console.log('initialize DesignView');
            this.collection = new DesignCollection();
            var here = this;
            $('#insert-dynamic-element').click(function(){
                var element = new ElementView();
                here.collection.models.addElement(element); 
            });
        },
        render: function(){

        }
    })

    return DesignView;
});

私はこの方法で addElement 関数を呼び出そうとしました:

here.collection.models.addElement(element);

here.collection.addElement(element);

しかし、オブジェクトにはメソッド addElement がないというエラーが常に発生します。これを解決するにはどうすればよいですか? ビューから addElement メソッドを呼び出して、コレクション内の別のアプリ内にアプリを追加したいと考えています。

ありがとう

4

2 に答える 2

1

まあ、それらの配列ではなく、特定のモデルを取得する必要があります。特定のモデルを基本的に恣意的に選択するため、これはエラーのように思えますが (アプリケーションにこれをサポートするセマンティクスがない場合)、これは機能します。

here.collection.at(0).addElement(element);
于 2013-08-05T20:49:18.727 に答える
1

メソッドを呼び出す最も安全な方法は、モデルではなくコレクションにメソッドを追加することです。現在、このメソッドは Model インスタンスで使用できます。

だからthis.collection.models.addElement切らない

コレクション

define(['backbone', 'models/design'], function(Backbone, DesignModel){

    var designCollection = Backbone.Collection.extend({
        model: DesignModel,
        addElement: function(elements, options) {
            return this.add(elements, options);
        }
    });

    return designCollection;
});

意見

define(['jquery' , 'backbone', 'models/design', 'collections/design', 'views/element'], 
    function($, Backbone,  DesignModel, DesignCollection, ElementView){
    var DesignView = Backbone.View.extend({
        el:$('#page'),

        initialize: function(){
            console.log('initialize DesignView');
            this.collection = new DesignCollection();
            var here = this;
            $('#insert-dynamic-element').click(function(){
                var element = new ElementView();
                here.collection.addElement(element); 
            });
        },
        render: function(){

        }
    })

    return DesignView;
});

現在のモデルからメソッドを移動したくない場合。次に、インデックスを使用して特定のモデルを呼び出す必要がある場合があります

here.collection.at(0).addElement(element);

ただし、コレクションにモデルが存在しない場合があり、これがエラー状態につながる可能性があります..

here.collection.at(0) && here.collection.at(0).addElement(element);
于 2013-08-05T20:49:30.933 に答える