当我创建新集合,获取响应并覆盖解析时,我看到集合中记录的模型数组,但在fetch返回后我无法访问它。是因为我没有在fetch
方法中正确指定某些内容吗?
class MyCollection extends Backbone.Collection
model: MyModel
fetch: () ->
$.ajax
type: 'GET'
url: '/customurl'
success: (data) =>
@parse data
parse: (resp) ->
if !resp
return []
things = []
# parse that shit and things.push new MyModel()
console.log 'things: ' + JSON.stringify things # this logs correctly
things
window.myCollection = new MyCollection()
window.myCollection.fetch()
# wait some time, see it logged inside collection parse method...
console.log JSON.stringify window.myCollection # logs as []
答案 0 :(得分:0)
尝试将async: false
作为选项传递给fetch方法:
window.myCollection.fetch({async: false})
您可能在console.log
中看不到任何内容,因为在结果返回之前它被称为。在结果返回后,parse
仅被称为。 你可能最好在函数foo()
,中执行任何自定义逻辑,然后在每次获取时使用更新的集合调用该函数:
window.myCollection.on("reset", foo)
您可以定义像foo(updatedCollection)
这样的函数,并对集合执行任何操作。这种方法更接近于Backbone的事件驱动重点。
另外,作为旁注,只要您在集合中specify url: '/customurl'
as a property,就可以摆脱对fetch
方法的覆盖。默认情况下,骨干网将使用GET
,默认情况下会将成功结果发送到parse
。
只是一个建议。希望以上的工作。