繁体   English   中英

Coffeescript类和Handlebars模板以及自定义块帮助器

[英]Coffeescript class and Handlebars template and custom block helper

当我在变量上使用Handlebars.compile时,效果很好,但是当我将函数放在Coffee类属性上时,它给了我undefined ,错误吗? 还是我错过了一些基本的Java /咖啡功能?

有我的小提琴: 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:回调不是函数

似乎回调部分未正确处理...错误在Coffee类或简单变量情况下都是相同的...

当你这样说:

class Test
  template: ...

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

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

或者,您可以从Test的原型中挖掘出template

console.log(Test::template)

如果希望template成为类属性,则:

class Test
  @template: ...

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


第二个问题与“ Handlebars”助手的调用方式有关。 最后一个参数曾经是回调函数,您可以在{{else}}块中使用fn.inverse 最后一个参数的助手,现在是用函数的对象.fn和else区块功能.inverse 因此,对于最新版本的把手,您的助手:

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/

这是因为您要检查Test类本身的template属性,而不是实例化Test类的新实例并检查该实例上的属性。 以下应该工作:

$ ->
  console.log new Test().template
  console.log template

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM