0

私はコーヒースクリプトでバックボーンを使用しています。ビューに使用するコードは次のとおりです。

    initialize: ->
      @collection.on "reset", @render, @
      @collection.fetch({reset: true})

    render: ->
      @collection = @collection.sortBy (item) -> item.get('name')
      @collection.forEach @renderEntry, @
      @

    renderEntry: (model) ->
      v = new App.Views.EntryView({model: model})
      @$el.append(v.render().el)

問題は、レンダリング関数の最初の行でバックボーン コレクションを並べ替えたいときに、Uncaught TypeError: Object [object Array] has no method 'sortBy'エラーが発生することです。render 関数を変更して次のように書き換えると:

    render: ->
      sorted = @collection.sortBy (item) -> item.get('name')
      sorted.forEach @renderEntry, @
      @

その後、すべて正常に動作します。元のコードの何が問題になっていますか?

並べ替え機能を別の機能に移動しようとしましたが、何も変わりませんでした。ソートされたコレクションをコレクション自体に割り当てたい場合も、同じエラーが発生します。

何か案は?

前もって感謝します。

4

1 に答える 1

0

解決しました!

問題は、リセットイベントが 2 回トリガーされることです。1 回はバックボーンで、2 回目はフェッチで。だから私が電話したのは初めて

    @collection = @collection.sortBy (item) -> item.get('name')

コレクションを空の配列に置き換えます(まだ何もフェッチされていないため)。したがって、次の実行で呼び出される sortBy メソッドはありません。

行を次のように置き換えます。

  (@collection = @collection.sortBy (item) -> item.get('name')) if @collection.length > 0

問題を解決します。

于 2013-10-15T07:00:00.180 に答える