【问题标题】:Backbone Collection inside Collection集合内的骨干集合
【发布时间】:2013-08-04 12:18:55
【问题描述】:

我在主干中有一个应用程序,在主应用程序中我有一个事件单击元素,当我单击它时,我想在其中添加另一个应用程序及其集合模型......是集合的集合。 我正在使用 require 我检索到的错误是:

Uncaught TypeError: Object [object Object] has no method 'addElement' 

这是我的主要应用程序: 型号:

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.addElement(element); 
            });
        },
        render: function(){
        }
    })

    return DesignView;
});

要插入到 main 中的应用程序: 型号:

define(['backbone'],function(Backbone){
    var ElementModel = Backbone.Model.extend({
        defaults:{
            name:'Design',
            type:'img'
        },
        initialize:function(){
            console.log('Initialized Element model');
        }
    });

    return ElementModel;
});

收藏:

define(['backbone', 'models/element'], function(Backbone, ElementModel){

    var elementCollection = Backbone.Collection.extend({
        model: ElementModel
    });



    return elementCollection;
});

查看

define(['jquery' , 'backbone', 'models/element', 'collections/element'], 
    function($, Backbone,  ElementModel, ElementCollection){
    var ElementView = Backbone.View.extend({
        el:$('#page'),

        initialize: function(){
            console.log('initialize ElementView');
            this.collection = new ElementCollection();
        },
        render: function(){
        }
    })

    return ElementView;
});

我该如何解决这个问题? 错误是当我在主应用程序中单击元素时,当我尝试制作 addElement

【问题讨论】:

    标签: jquery backbone.js requirejs


    【解决方案1】:

    该方法在DesignModel 中可用,在DesignCollection 中不可用

    因此,当您调用此方法时,它会在 Collection 中搜索导致错误的不存在的方法。

    当您可以选择使用 Native Backbone events 处理事件时,为什么还要使用 jQuery 绑定事件

    为了解决这个问题,将方法添加到集合中

    define(['backbone', 'models/design'], function(Backbone, DesignModel){
    
        var designCollection = Backbone.Collection.extend({
            model: DesignModel,
            addElement: function(element, options) {
                return this.add(element, options);
            }
        });
    
        return designCollection;
    });
    

    【讨论】:

    • 对于事件是因为元素在元素的应用程序之外。你对方法的问题有什么建议?移动方法或更改对方法的调用?在哪种模式下?谢谢
    • @AlessandroMinoccheri.. 检查更新的帖子..您可以将方法移动到集合中,因为您将始终将模型添加到集合中.. 同样可以以更清洁的方式完成跨度>
    • 现在的问题是“Cannot call method 'add' of undefined”因为元素被声明到模型中,将它移到集合中是否正确?
    • 我已经复制了你的代码并放在了集合文件中,我已经从模型文件中剪切了这个,文件的其他部分和我的问题一样
    • 如果你在集合中包含方法,它应该是return this.add( 而不是 return this.elements.add(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多