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

但总是出现 Object 没有方法 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 回答