0

它抛出了这个错误:Uncaught TypeError: Cannot call method 'fetch' of undefined in view。@collection 在视图中是未定义的,尽管它似乎是通过路由器传递的。

如果你很好奇,ajaxSubmit 被用于处理文件上传。

有任何想法吗?

路由器/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 回答