使用Hem的Spine JS错误渲染.eco模板:“无法读取未定义的属性'长度'”

时间:2012-01-29 17:03:58

标签: javascript coffeescript spine.js

学习spine.js我完成了两个教程没有问题,看起来像一个很棒的框架,但这个简单的小问题让我疯了,因为我不知道我能做些什么来解决它......

根据我的理解,变量@list应该可以通过.eco模板访问(由下边编译),但不是,还有其他人遇到过吗?

有人可以告诉我哪里出错了吗?

Users.coffee

Spine = require('spine')
User  = require('models/user')
$     = Spine.$

class Show extends Spine.Controller
  className: 'UserApp'

  events:
    'click .NewUser' : 'new'

  constructor: ->
    super    
    User.bind('create refresh change', @render)
    @active @render

  render: =>
    #get all users and render list
    @list= [1,2,3,4,5]
    console.log(@list)
    @html require('views/UserApp')(@list)

  new: ->
    @navigate('/users','create')

UserApp.eco

 <% if @list.length: %>
     <% for i in @list: %>
      <%= i %>
     <% end %>
    <% else: %>
     Why you no work!?
    <% end %>

2 个答案:

答案 0 :(得分:5)

@html require('views/UserApp')()

期望哈希对象作为参数。因此,如果您想在视图中使用@list变量(我的意思是ala Rails),您必须执行以下操作:

@html require('views/UserApp')(list: @list)

其中键将是视图中变量的名称。所以使用:

@html require('views/UserApp')(@list)

就像您正在进行的操作会将@list变量视为当前@this,并且在您的视图中,您应该能够以下列方式使用它:

<% if @.length: %>
     <% for i in @: %>
      <%= i %>
     <% end %>
<% else: %>
     Why you no work!?
<% end %>

但它不那么可读。

答案 1 :(得分:3)

我认为模板希望收到一个对象。然后使用@key_name;

访问该对象的属性

尝试这样的事情(免责声明:我不知道Coffeescript)

render: =>
    #get all users and render list
    @item = {}
    @item.list = [1,2,3,4,5]
    @html require('views/UserApp')(@item)