您好我是骨干新手,我有一个页面,我想显示有关模型的信息。当我尝试在控制台上访问它时,它可以正常运行
例如:
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和骨干的新手,我很迷茫。有人可以帮忙吗
答案 0 :(得分:0)
正如mu所说,fetch
是一个异步的ajax调用。所以你必须等待结果然后做点什么。 backbone
为您提供了两个选项
第一个选项:使用回调对象
调用fetch
fetch
使用success
或error
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()