车把子表达式抛出“ options.fn不是函数”错误

通海

我正在尝试在Handlebars中使用子表达式,但是即使在最简单的表达式上也出现“ options.fn不是函数”错误。在使用https://github.com/assemble/handlebars-helpers中的其他帮助器时,此表达式可以正常工作:

{{#and true true}}OK{{/and}}

但是如果我这样子表达式

{{#and (gt 4 3) (gt 5 4)}}OK{{/and}}

或这个

{{#and (gt 4 3) true}}OK{{/and}}

库引发错误

TypeError:[feed.hbs] options.fn不是    Object.eval中的
   Object.helpers.gt(/Users/me/Projects/jackal/node_modules/handlebars-helpers/lib/comparison.js:152:20)
的函数(等效于createFunctionContext ...

我需要检查两个条件。目前,它是通过嵌套表达式实现的:

{{#gt 4 3}}
    {{#gt 5 4}}
        ok
    {{/gt}}
{{/gt}}

那么我的子表达式有什么问题呢?

在我看来这种方式不支持子表达式handlebars-helpers

我用调试器看了一下代码。因为{{#and (gt 4 3) (gt 5 4)}}OK{{/and}}(gt 4 3)本身被正确调用,但是gt帮助程序的代码为:

helpers.gt = function(a, b, options) {
  if (arguments.length === 2) {
    options = b;
    b = options.hash.compare;
  }
  if (a > b) {
    return options.fn(this);
  }
  return options.inverse(this);
};

但是因为子表达式既没有fn(if块)也没有inverse(else块),所以此时handlebars-helpers失败。

为了支持您的表达,handlebars-helpers需要-恕我直言-将其代码重写为类似的代码:

helpers.gt = function(a, b, options) {
  if (arguments.length === 2) {
    options = b;
    b = options.hash.compare;
  }

  //fn block exists to it is not a subexpression

  if( options.fn ) {
     if (a > b) {
       return options.fn(this);
     }
     return options.inverse(this);
  } else {
     return a > b;
  }
};

因此,目前您不能将子表达式与一起使用handlebars-helpers

我在他们的github页面上添加了一个Issue:Supporting Handlebars子表达式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

车把自定义助手错误:“ options.fn不是函数”

来自分类Dev

灰烬车把助手options.inverse undefined不是函数

来自分类Dev

我如何在Angularjs的ng-options表达式中使用函数和变量

来自分类Dev

$ routeProvider配置路由抛出“未捕获的错误:[ng:areq]参数'fn'不是函数,得到了字符串”

来自分类Dev

如何匹配整个正则表达式而不是子表达式

来自分类Dev

调用 super 抛出“super 不是表达式”

来自分类Dev

如果表达式为假,则抛出异常的标准函数?

来自分类Dev

zsh 函数抛出“错误的数学表达式:非法字符”错误

来自分类Dev

方法表达式不是函数类型

来自分类Dev

正则表达式不是函数

来自分类Dev

(()=> {}),而不是JavaScript函数表达式

来自分类Dev

“ $”导致正则表达式中的m子表达错误

来自分类Dev

是否可以将车把表达式值传递给子表达式?

来自分类Dev

JPQL不是选定的表达式错误

来自分类Dev

错误:结构类型不是表达式

来自分类Dev

错误:“函数REGEXEXTRACT参数2值“ ...”不是有效的正则表达式

来自分类Dev

扩展“组件”;未捕获的类型错误:超级表达式必须为 null 或函数,而不是对象

来自分类Dev

Ng-Options表达式反复调用

来自分类Dev

组表达式中的ng-options trackby

来自分类Dev

允许编译器在不同的函数参数中交织子表达式的求值吗?

来自分类Dev

JavaScript函数调用子表达式可以是尾部调用吗?

来自分类Dev

类型错误:未定义不是构造函数(评估“selectList.append(options)”)

来自分类Dev

TBB库:错误:编写自定义类函数而不是lambda表达式时,函数调用不匹配

来自分类Dev

使用函数表达式而不是函数声明的好处?

来自分类Dev

匹配Python正则表达式子表达式中的所有字符(包括换行符),而不是全局

来自分类Dev

如果对象的构造函数为noexcept,则可以抛出放置新的(表达式)吗?

来自分类Dev

“'try' 表达式中不会发生对抛出函数的调用”

来自分类Dev

这个正则表达式有什么问题?JSLint抛出错误

来自分类Dev

立即执行且变量抛出错误ORA-00936:缺少表达式

Related 相关文章

  1. 1

    车把自定义助手错误:“ options.fn不是函数”

  2. 2

    灰烬车把助手options.inverse undefined不是函数

  3. 3

    我如何在Angularjs的ng-options表达式中使用函数和变量

  4. 4

    $ routeProvider配置路由抛出“未捕获的错误:[ng:areq]参数'fn'不是函数,得到了字符串”

  5. 5

    如何匹配整个正则表达式而不是子表达式

  6. 6

    调用 super 抛出“super 不是表达式”

  7. 7

    如果表达式为假,则抛出异常的标准函数?

  8. 8

    zsh 函数抛出“错误的数学表达式:非法字符”错误

  9. 9

    方法表达式不是函数类型

  10. 10

    正则表达式不是函数

  11. 11

    (()=> {}),而不是JavaScript函数表达式

  12. 12

    “ $”导致正则表达式中的m子表达错误

  13. 13

    是否可以将车把表达式值传递给子表达式?

  14. 14

    JPQL不是选定的表达式错误

  15. 15

    错误:结构类型不是表达式

  16. 16

    错误:“函数REGEXEXTRACT参数2值“ ...”不是有效的正则表达式

  17. 17

    扩展“组件”;未捕获的类型错误:超级表达式必须为 null 或函数,而不是对象

  18. 18

    Ng-Options表达式反复调用

  19. 19

    组表达式中的ng-options trackby

  20. 20

    允许编译器在不同的函数参数中交织子表达式的求值吗?

  21. 21

    JavaScript函数调用子表达式可以是尾部调用吗?

  22. 22

    类型错误:未定义不是构造函数(评估“selectList.append(options)”)

  23. 23

    TBB库:错误:编写自定义类函数而不是lambda表达式时,函数调用不匹配

  24. 24

    使用函数表达式而不是函数声明的好处?

  25. 25

    匹配Python正则表达式子表达式中的所有字符(包括换行符),而不是全局

  26. 26

    如果对象的构造函数为noexcept,则可以抛出放置新的(表达式)吗?

  27. 27

    “'try' 表达式中不会发生对抛出函数的调用”

  28. 28

    这个正则表达式有什么问题?JSLint抛出错误

  29. 29

    立即执行且变量抛出错误ORA-00936:缺少表达式

热门标签

归档