当我在变量上使用 Handlebars.compile 时效果很好,但是当我将该函数放在Coffee类属性上时,它会给我 undefined ,bug?或者我想念一些基本的java / coffee功能?
有我的小提琴:http://jsfiddle.net/Cl0udW4lk3r/BpY5b/
class Test
template: Handlebars.compile (
"""
{{#iterate data}}
<p>{{data}}</p>
{{/iterate}}
"""
)
template = Handlebars.compile (
"""
{{#iterate data}}
<p>{{data}}</p>
{{/iterate}}
"""
)
行动中还有另一个小提琴:http://jsfiddle.net/Cl0udW4lk3r/D3FR9/20/
----更新-----
我的第一个小提琴已经解决了(但是把手的版本已经过时了),错误是一个愚蠢的OOP疏忽......
但是!我的第二个小提琴(现在我已经更新了第一小提琴的把手资源,也是我的第一个小提琴......)给我一个错误
TypeError:回调不是函数
似乎回调部分没有正确处理......咖啡类或简单变量情况下的错误都相同......
答案 0 :(得分:3)
当你这样说时:
class Test
template: ...
您将template
定义为实例属性,因此您必须先创建一个实例才能查看template
:
t = new Test
console.log(t.template)
或者你可以从template
的原型中挖出Test
:
console.log(Test::template)
如果您希望template
成为类属性,那么:
class Test
@template: ...
演示:http://jsfiddle.net/ambiguous/tvDpN/
您的第二个问题与Handlebars助手的调用方式有关。最后一个参数曾经是回调函数,您将fn.inverse
用于{{else}}
块。帮助器的最后一个参数现在是一个对象,其函数位于.fn
,而else-block函数位于.inverse
。所以对于Handlebars的最新版本,你的助手:
Handlebars.registerHelper 'iterate', (context, callback) ->
switch typeof context
when 'object' then (callback(key: key, value: value) for own key, value of context).join ''
看起来应该更像这样:
Handlebars.registerHelper 'iterate', (context, options) ->
switch typeof context
when 'object' then (options.fn(key: key, value: value) for own key, value of context).join ''
答案 1 :(得分:2)
这是因为您正在检查template
类本身的Test
属性,而不是实例化Test
类的新实例并检查该实例上的属性。以下应该有效:
$ ->
console.log new Test().template
console.log template