Backbone:集合没有正确获取模型

时间:2013-08-03 04:45:00

标签: javascript jquery backbone.js coffeescript

您好我是骨干新手,我有一个页面,我想显示有关模型的信息。当我尝试在控制台上访问它时,它可以正常运行

例如:

collection = new Poster.Colections.Posts()
collection.fetch({reset: true})
post = collection.get(1)

以上工作正常

现在,当我尝试在routers页面上的某个函数中执行此操作时,它将返回undefined

posts_router.js

class Poster.Routers.Posts extends Backbone.Router
    routes:
        'posts':'index'
        '':'index'
        'posts/new': 'new'
        'posts/:id': 'show'

    initialize: ->
        @collection = new Poster.Collections.Posts()
        @collection.fetch({reset: true})


    index: ->
        view = new Poster.Views.PostsIndex(collection: @collection)
        $('#index_container').html(view.render().el)

    show: (id) ->
        post = @collection.get(id)
        view = new Poster.Views.PostsShow(model: post)
        $('#index_container').html(view.render().el)

    new: ->
        view = new Poster.Views.PostsNew(collection: @collection)
        $('#index_container').html(view.render().el)

我是javascript和骨干的新手,我很迷茫。有人可以帮忙吗

1 个答案:

答案 0 :(得分:0)

正如mu所说,fetch是一个异步的ajax调用。所以你必须等待结果然后做点什么。 backbone为您提供了两个选项

第一个选项:使用回调对象

调用fetch

fetch使用successerror

的回调对象
collection = new Poster.Collections.Posts()
collection.fetch
  success: ->
    console.log 'Collection fetched'
    post = collection.get(1)
  error: ->
    console.error 'Unable to fetch collection'

第二个选项:收听对集合的更改

将模型添加到集合中(在获取集合时完成)会触发add事件

collection = new Poster.Collections.Posts.extend
  initialize: ->
    @on 'add', (model) =>
      console.log "model #{model} added"

collection.fetch()

List of built-in events