首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spine.js呈现视图

Spine.js呈现视图
EN

Stack Overflow用户
提问于 2012-11-20 16:26:17
回答 1查看 594关注 0票数 1

我刚刚开始使用spine,我在理解一些事情上有困难……

代码语言:javascript
复制
class Spk.Register extends Spine.Controller
  render: ->
    @html("<h1>Registration!</h1>")

..。

代码语言:javascript
复制
Zepto(function($) {
  new Spk.Register({
    el: $("#data")
  });
});

...I期望在实例化控制器时,用传递给@html的html替换#data元素中的任何html,但它没有,什么也没有发生。

我也尝试过将render方法放入构造函数中,但同样没有任何反应。

在实例化控制器时,如何用给定的html替换body中的html?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 19:50:15

问题是render()方法没有被调用。

你必须在控制器实例化后显式调用它。

无论如何,我认为你不应该在构造器中做任何渲染。更好的选择是:

  • 要有一个在从服务器加载数据后触发特定事件的模型(MVC架构),
  • 控制器应该为该事件定义事件处理程序,并将呈现视图。

编辑只是非常简单的代码片段(CoffeeScript,使用jQuery):

Task模型类:

代码语言:javascript
复制
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

控制器:

代码语言:javascript
复制
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控制器堆栈):

代码语言:javascript
复制
tasksCtrl = new Tasks el: $('.task-list')
tasksCtrl.navigate 'list'

请注意,它还需要route.js (包含在Spine.js中),并且我已经使用了Transparency模板引擎(它是@el.render()方法)。然后,模板如下所示:

代码语言:javascript
复制
<div class="task-list">
    <div class="task">
        <span data-bind="name"></span>
        <span data-bind="deadline"></span>
    </div>
 </div>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13469163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档