覆盖Collection的获取

时间:2012-07-16 01:56:25

标签: javascript backbone.js

当我创建新集合,获取响应并覆盖解析时,我看到集合中记录的模型数组,但在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 []

1 个答案:

答案 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

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