0

このエラーがスローされます: Uncaught TypeError:ビューで未定義のメソッド'fetch'を呼び出すことができません。@collectionは、ルーターを介して渡されているように見えますが、ビューでは未定義です。

興味があれば、ajaxSubmitを使用してファイルのアップロードを処理しています。

何か案は?

routers / tracks.js.coffee

...
initialize: ->
  @collection = new Jambox.Collections.Tracks()
  @collection.fetch() # works!

new: (name) ->
  view = new Jambox.Views.TracksNew(name, collection: @collection)

ビュー/トラック/new.js.coffee

events:
  'click #submit': 'uploadTrack'

uploadTrack: (e) ->
  e.preventDefault()
  $(@el).find('#new-track').ajaxSubmit(
    success: => @collection.fetch()  # Uncaught TypeError
  )
  ...
4

2 に答える 2

1

コールバックのコンテキスト(AKA@またはthissuccessはおそらくビューオブジェクトではなく、おそらく同じコンテキストで$.ajaxあり、次のようになります。

デフォルトでは、コンテキストは、呼び出しで使用されるajax設定を表すオブジェクトです(に$.ajaxSettings渡される設定とマージされます$.ajax

成功のコールバックを太い矢印(=>でビューにバインドする必要があります:

uploadTrack: (e) ->
  e.preventDefault()
  $(@el).find('#new-track').ajaxSubmit(
    success: => @collection.fetch()
  )
  ...
于 2012-11-04T18:46:08.933 に答える
0

問題を見つけました。これが、コレクションをビューに渡さなかった理由です。

元は:

new: (name) ->
  view = new Jambox.Views.TracksNew(name, collection: @collection)

修正:

new: (name) ->
  view = new Jambox.Views.TracksNew(name: name, collection: @collection)
于 2012-11-04T21:52:15.390 に答える