2013-08-04 267 views
1

我有一个骨干应用程序中的应用程序我有一个事件点击onan元素,当我点击它时我想添加其他应用程序里面的集合模型...是一个集合集合。 我使用的要求,我检索错误是:集合中的骨干集合

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

应用到里面插入主: 型号:

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

回答

1

此方法,可在DesignModel而不是DesignCollection

所以,当你调用这个方法,它会搜索Collection里面的方法不存在会导致错误的方法。

而且你为什么要使用jQuery绑定的事件时,您可以选择使用Native Backbone events

为了解决这个问题的方法对于事件是因为添加到收藏

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; 
}); 
+0

的移交的选项相同该元素在元素的应用程序之外。你对该方法的问题提出了什么建议?移动方法或更改对该方法的调用?在哪种模式下?谢谢 –

+0

@AlessandroMinoccheri ..检查更新的帖子..你可以将方法移动到集合中,因为您将始终将模型添加到集合中。同样可以用更清晰的方式完成 –

+0

现在的问题是“Can not调用方法'添加'未定义的“因为要素正在声明到模型中,将其移入集合是否正确? –