Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Coffeescript类和把手模板以及自定义块辅助对象_Javascript_Coffeescript_Handlebars.js - Fatal编程技术网

Javascript Coffeescript类和把手模板以及自定义块辅助对象

Javascript Coffeescript类和把手模板以及自定义块辅助对象,javascript,coffeescript,handlebars.js,Javascript,Coffeescript,Handlebars.js,当我对一个变量使用handlebar.compile时,它工作得很好,但是当我将函数放在Coffee类属性上时,它会给我未定义的,bug?或者我错过了一些基本的java/coffee功能 这是我的小提琴: 类测试 模板:handlebar.compile( """ {{{#迭代数据} {{data}} {{/迭代} """ ) 模板=handlebar.compile( """ {{{#迭代数据} {{data}} {{/迭代} """ ) 还有另一个与脊梁有关的问题: ----更新-----

当我对一个变量使用handlebar.compile时,它工作得很好,但是当我将函数放在Coffee类属性上时,它会给我未定义的,bug?或者我错过了一些基本的java/coffee功能

这是我的小提琴:

类测试
模板:handlebar.compile(
"""
{{{#迭代数据}
{{data}}

{{/迭代} """ ) 模板=handlebar.compile( """ {{{#迭代数据} {{data}}

{{/迭代} """ )
还有另一个与脊梁有关的问题:

----更新-----

我的第一把小提琴解决了(但车把版本过时了),错误是一个愚蠢的OOP疏忽

但是!我的第二把小提琴(现在我已经更新了第一把小提琴的把手资源,也是我的第一把小提琴…)给了我一个错误

TypeError:回调不是函数


看来回调部分没有正确处理。。。coffee类或简单变量情况下的错误都是相同的…

这是因为您正在检查
Test
类本身的
模板
属性,而不是实例化
Test
类的新实例并检查该实例上的属性。以下方面应起作用:

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

这是因为您正在检查
Test
类本身的
template
属性,而不是实例化
Test
类的新实例并检查该实例上的属性。以下方面应起作用:

$ ->
  console.log new Test().template
  console.log template
当你这么说的时候:

class Test
  template: ...
您正在将
template
定义为实例属性,因此必须先创建实例,然后才能查看
template

t = new Test
console.log(t.template)
或者您可以从
测试
的原型中挖掘
模板

console.log(Test::template)
如果希望
模板
成为类属性,则:

class Test
  @template: ...
演示:


您的第二个问题是关于如何调用把手助手的更改。最后一个参数过去是回调函数,您将对
{{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 ''
演示:

当您这样说:

class Test
  template: ...
您正在将
template
定义为实例属性,因此必须先创建实例,然后才能查看
template

t = new Test
console.log(t.template)
或者您可以从
测试
的原型中挖掘
模板

console.log(Test::template)
如果希望
模板
成为类属性,则:

class Test
  @template: ...
演示:


您的第二个问题是关于如何调用把手助手的更改。最后一个参数过去是回调函数,您将对
{{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 ''

演示:

哦,我的错误,谢谢,第一把小提琴现在可以用了,那么我不明白为什么第二把小提琴不能用,如果你用firebug检查它,它会给出一个错误:回调不是函数…@cl0udw4lk3r:看看我的更新。车把助手的参数发生了变化,您使用的是旧的参数格式和新的库。哦,我的错误,谢谢,第一个提琴现在可以工作了,那么我不明白为什么第二个提琴不能工作,如果您用firebug检查它,它会给出一个错误:回调不是函数…@cl0udw4lk3r:看看我的更新。Handlebar helpers的参数已更改,您正在将旧的参数格式与新的库一起使用。