2013-03-11 64 views
2

我正在玩CoffeeScript,並且遇到了一個非常令人沮喪的錯誤。我有一個集合(這我是從一個Ajax調用填充 - 不fetch() - 因爲我需要調整被返回的JSON)Backbone Collection沒有方法添加(在Coffeescript中)

這裏的收集

$ -> 
    class AppName.Members extends Backbone.Collection 
    model: AppName.Member 

而且模型

$ -> 
    class AppName.Member extends Backbone.Model 

很簡單吧?最終,我會建立這些以獲取非填充數據,但目前情況如此。現在我觀點

$ -> 
    class AppName.TitleView extends Backbone.View 
    template: JST['templates/title'] 
    initialize: -> 
     @bind(@collection, 'add', @addOne); 
     @bind(@collection, 'reset', @addAll); 
     @bind(@collection, 'all', @render); 
     $.ajax 
     dataType: 'json' 
     url: '/housemembers' 
     success: (data, textStatus, jqXHR) -> 
      for member in data.results[0].members 
      model = 
       state : member.state 
       first_name : member.first_name 
       middle_name : member.middle_name 
       last_name : member.last_name 
       next_election : member.next_election 
       party : member.party 
      AppName.Members.add model 

     @ 

什麼殺了我是AppName.Members.add model失敗:

Uncaught TypeError: Object function Members() { 
     Members.__super__.constructor.apply(this, arguments); 
     } has no method 'add' 

但是,當我想到在Chrome中的元素,也顯然是對Members()構造的add方法! !

實際上,放入手錶AppName.Members.__super__.add會返回一個函數回調!

那麼這裏發生了什麼?爲什麼不是AppName.Members一個完整的Backbone集合?

回答

5

add是集合上的實例方法,但您試圖將其用作類方法。您需要首先創建自己的集合的實例:

AppName.members = new AppName.Members 

,然後加入模型實例:

AppName.members.add model 

或者,如果你想模型添加到@collection,然後做這樣的事情:

$.ajax 
    #... 
    success: (data, textStatus, jqXHR) => 
    #... 
    @collection.add model 
+0

這工作(有點),但我得到一個未定義的錯誤是在骨幹更深入的未定義的錯誤。我將更新一次,然後用非縮小版本解決問題,並找出如何清除我的耙子資產路徑:P – CamelBlues 2013-03-12 16:05:31

+0

@CamelBlues:這聽起來像是無關緊要的東西。 – 2013-03-12 17:55:22

+0

你是對的,這是非常無關的。這絕對是我的問題的正確答案,作爲一個附錄,我還需要確保我的models.coffee被加載到collections.coffee之前,因爲集合不知道該怎麼做它的模型 – CamelBlues 2013-03-23 20:32:01

相關問題