问题是 render() 方法没有被调用。
您必须在控制器实例化后显式调用它。
无论如何,我认为您不应该在构造函数中进行任何渲染。
更好的选择是:
- 拥有触发特定事件的模型(MVC 架构)
从服务器加载数据后,
- 控制器应为该事件定义事件处理程序,并将呈现视图。
编辑
只是非常简单的代码 sn-p 怎么可能(CoffeeScript,使用 jQuery):
Task 模型类:
class Task extends Spine.Model
@configure 'Task', 'name', 'deadline'
@fetch () ->
Task.deleteAll()
# ... load data from the server ...
Task.create name: 'foo', deadline: '2012-11-22' # create local instance(s)
Task.trigger 'data-loaded'
return
控制器:
class Tasks extends Spine.Controller
constructor: ->
super
init: () ->
@routes
'list': (params) ->
Task.fetch()
return
Task.bind 'data-loaded', () =>
@render()
return
return
render: () ->
@el.render Task.all()
return
初始化代码(另一种可能是 Spine.js 控制器堆栈):
tasksCtrl = new Tasks el: $('.task-list')
tasksCtrl.navigate 'list'
请注意,它还需要 route.js(包含在 Spine.js 中)并且我使用了 Transparency 模板引擎(它是 @el.render() meth)。然后模板看起来像:
<div class="task-list">
<div class="task">
<span data-bind="name"></span>
<span data-bind="deadline"></span>
</div>
</div>