我将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
控制器(由一个名为App.SurveyStack
的Spine.Stack
调用)带来了问题:
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.fetch()
完成之前,我可以让Survey.find()
函数阻塞吗?
发布于 2012-01-25 02:39:18
您的诊断是正确的,即您在从服务器获取项目之前无法找到它。
最简单的解决方案是将事件绑定到Survey.fetch()调用,如下所示:
Survey.bind 'refresh change', @method_to_call
如果有帮助,请让我知道!
发布于 2012-10-03 09:38:22
实际上,对我有效的解决方案是在对象刷新之后初始化Spine.Route.setup()。而不是app/index.js咖啡中的标准调用,它将是:
App.Survey.one 'refresh', ->
Spine.Route.setup()
https://stackoverflow.com/questions/8980925
复制相似问题