Backbone Collection没有添加方法(在Coffeescript中)

时间:2013-03-11 01:44:50

标签: backbone.js coffeescript

我正在玩CoffeeScript,我遇到了一个非常令人沮丧的错误。我有一个集合(我从ajax调用填充 - 而不是fetch() - 因为我需要调整返回的JSON)

这是集合

$ ->
  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中的元素时,add构造函数上显然有一个Members()方法!

实际上,放入AppName.Members.__super__.add的监视会返回一个函数回调!

那么这里发生了什么?为什么AppName.Members不是完整的Backbone集合?

1 个答案:

答案 0 :(得分:5)

add是集合上的实例方法,但您尝试将其用作类方法。您需要先创建集合的实例:

AppName.members = new AppName.Members

然后将模型添加到实例:

AppName.members.add model

或者,如果您尝试将模型添加到@collection,请执行以下操作:

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