2

私は CoffeeScript で遊んでいて、本当にイライラするエラーに遭遇しています。fetch()コレクションがあります(返されるJSONを微調整する必要があるため、ajax呼び出しからデータを入力しています-そうではありません)

コレクションはこちら

$ ->
  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本格的なバックボーン コレクションではないのはなぜですか?

4

1 に答える 1

5

addはコレクションのインスタンス メソッドですが、クラス メソッドとして使用しようとしています。最初にコレクションのインスタンスを作成する必要があります。

AppName.members = new AppName.Members

次に、モデルをインスタンスに追加します。

AppName.members.add model

または、モデルを に追加しようとしている場合は@collection、次のようにします。

$.ajax
  #...
  success: (data, textStatus, jqXHR) =>
    #...
    @collection.add model
于 2013-03-11T02:22:58.723 に答える