学习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 %>
答案 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)