0

当我创建一个新集合、获取响应并覆盖解析时,我看到集合中记录了模型数组,但在获取返回后我无法访问它。是因为我没有在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 []
4

1 回答 1

0

尝试async: false作为选项传递给 fetch 方法:

window.myCollection.fetch({async: false})

您可能看不到任何内容,console.log因为它是在结果返回之前被调用的。parse仅在结果返回后调用。您最好在函数中执行任何自定义逻辑foo()然后在 fetch 发生时使用更新的集合调用该函数:

window.myCollection.on("reset", foo)

您可以定义函数,例如:foo(updatedCollection)并对集合执行任何操作。这种方法更接近于 Backbone 的事件驱动强调。

另外,作为旁注,只要您在集合中指定url: '/customurl'为属性,就可以摆脱对该fetch方法的覆盖。默认情况下,主干将使用 ,GET并且默认情况下会将成功的结果发送到parse

只是一个建议。希望以上工作。

于 2012-07-16T02:14:04.070 回答