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

Spine JS error rendering .eco template using Hem : "Cannot read property 'length' of undefined"

本文关键字:未定义 读取 属性 长度 错误 JS 使用 Hem 模板 eco Spine      更新时间:2023-09-26

Learning spine.js我完成了两个教程,没有问题,看起来是一个很棒的框架,但这个简单的小问题让我抓狂,因为我不知道我能做些什么来修复它…

据我所知,.eco模板(由hem编译)应该可以访问变量@list,但事实并非如此,其他人遇到过这种情况吗?

有人能告诉我哪里出了问题吗?

用户.咖啡

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 %>
@html require('views/UserApp')()

需要一个散列对象作为参数。因此,如果你想在你的视图中使用@list变量(我的意思是alaRails),你必须做如下操作:

@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 %>

但它不是那么可读。

我认为模板期望接收一个对象。然后使用@key_name访问该对象的属性;

试试这样的东西(免责声明:我不知道Coffeescapet)

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