1

当我在变量上使用Handlebars.compile时,它​​运行良好,但是当我将函数放在 Coffee 类属性上时,它给了我undefined,错误?或者我错过了一些基本的 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:回调不是函数

似乎回调部分没有正确处理......咖啡类或简单变量案例的错误都是一样的......

4

2 回答 2

3

当你这样说时:

class Test
  template: ...

您将定义template为实例属性,因此您必须先创建一个实例,然后才能查看template

t = new Test
console.log(t.template)

或者你可以挖掘templateTest的原型:

console.log(Test::template)

如果你想template成为一个类属性,那么:

class Test
  @template: ...

演示:http: //jsfiddle.net/ambiguous/tvDpN/


您的第二个问题与调用 Handlebars 助手的方式有关。最后一个参数曾经是回调函数,您将fn.inverse用于{{else}}块。helper 的最后一个参数现在是一个对象,其中包含函数 in.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 ''

演示:http: //jsfiddle.net/ambiguous/NQZTG/

于 2013-03-04T06:38:24.663 回答
2

这是因为您正在检查类本身的template属性Test,而不是实例化Test类的新实例并检查该实例的属性。以下应该有效:

$ ->
  console.log new Test().template
  console.log template
于 2013-03-04T06:38:13.047 回答