最近想把 backbone 整合到项目中来(https://github.com/AndySze/startupkits)。结果困难重重。
有个奇怪的问题。初始化的变量不能用。 代码
class Startupkit.Routers.Ideas extends Backbone.Router
routes:
'ideas/:id':'show'
'' : 'index'
initialize: ->
@ideas = new Startupkit.Collections.Ideas()
@ideas.fetch()
#index没有问题,可以获取所有的record
index: ->
view = new Startupkit.Views.IdeasIndex(collection:@ideas)
$('#container').html(view.render().el)
#show却不工作了。alert获取长度为0
show: (id) ->
idea = @ideas.get(id)
alert "#{@ideas.length}"
view = new Startupkit.Views.IdeaShow(model: idea)
$('#container').html(view.render().el)
@ideas
明明已经有内容了。到了 show 动作为什么就没有了?
Router 用了 pushState,导致点击后刷新了页面,所以@ideas还没获取到,show 动作已经开始,从而产生了错误。
解决
暂时把 pushState 关闭,调试完成后再考试开启。这个问题不会 debug,尤其我这新手。