【问题标题】:How do Handlebars custom Helper arguments workHandlebars 自定义 Helper 参数如何工作
【发布时间】:2020-01-28 10:32:13
【问题描述】:

我试图了解Handlebars helpers 的论点是如何产生的。

我了解实际调用的函数,但不了解它们需要的参数是如何提供给它们的。

示例 1 - 内置 Helper:

Handlebars.registerHelper("if", function(conditional, options) {
  if (conditional) {
    return options.fn(this);
  } else {
    return options.inverse(this);
  }
});

通过调用

{{#if blockExists}}
   //blalba
{{/if}}

什么是conditionaloptions,它们实际上是如何解析为函数的?

示例 2 - 自定义助手:

Handlebars.registerHelper('concat', (str1, str2, separator) => {
  return `${str1 || ''}${separator || ''}${str2 || ''}`;
});

这个 Helper 是怎么调用的?参数是如何解析的?由于返回值不是truefalse,如何使用?

感谢您的帮助。

【问题讨论】:

    标签: javascript templates handlebars.js


    【解决方案1】:

    文档:Helpers with Multiple Parameters

    您的 hbs 文件:

    {{concat "str1" "str2" "separetor"}}
    

    第一个参数是助手的名字,其他的是参数

    你的助手:

    Handlebars.registerHelper('concat', (str1, str2, separator) => {
     return `${str1 || ''}${separator || ''}${str2 || ''}`;
    });
    

    {{表达式}}返回的值可以是一个字符串,你应该用return new Handlebars.SafeString(result);传递它

    【讨论】:

    • 为什么在 concat 之前不需要#,就像在#if 一样?还有 if 子句中的 conditionaloptions 是从哪里来的?
    • Options 是车把提供的选项对象,# 用于 build-in 助手
    • 小更正:# 不用于内置帮助程序,而是用于调节代码段 -> 代码调节需要 {{#helper x z}} 中的 # 条件代码 @ 987654335@如果助手为真
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多