我将spine.js与Spine.Ajax
模块结合使用,通过JSON从服务器加载东西。我可能遇到了一些同步问题。我有一个侧边栏,它只是绑定到刷新和更改事件,然后呈现:
Survey.bind 'refresh change', @render
我还设置了一些路线,当用户通过#/ survey /:id访问时,会显示一个调查。这是我的控制者:
class App.Surveys extends Spine.Controller
className: 'surveys'
constructor: ->
super
@append(@sidebar = new App.Sidebar) # Sidebar to select surveys
@append(@surveys = new App.SurveysStack) # Show survey details survey
@routes
'/surveys/:id': (params) ->
@sidebar.active(params)
@surveys.show.active(params)
Survey.fetch()
如您所见,初始化后调用Survey.fetch()
,这不会给侧边栏带来问题。但是,它似乎给调查Show
控制器(由名为Spine.Stack
的{{1}}调用)带来了问题:
App.SurveyStack
我不断收到来自评论部分的错误:class Show extends Spine.Controller
constructor: ->
super
@active @change
change: (params) =>
# There is a bug! If Survey is not fetched when we run this,
# this throws an error.
@item = Survey.find(params.id)
@render()
render: ->
@html @view("surveys/show")(@item)
。我可以在Uncaught Unknown record
完成之前制作Survey.find()
功能块吗?
答案 0 :(得分:2)
在您的诊断中,您在从服务器获取项目之前找不到项目是正确的。
最简单的解决方案是将事件绑定到Survey.fetch()调用,如下所示:
Survey.bind 'refresh change', @method_to_call
如果有帮助,请告诉我!
答案 1 :(得分:2)
实际上,对我有用的解决方案是在对象刷新后初始化Spine.Route.setup()。而不是app / index.js.coffee中的标准调用,它将是:
App.Survey.one 'refresh', ->
Spine.Route.setup()