车把动态内联部分

时间:2019-09-27 23:30:00

标签: javascript templates handlebars.js

我想避免保留在外部部分文件中的几行标记,但是应该基于变量值IN_PROCESSDONE来呈现它。我可以制作内联局部函数并根据静态名称进行渲染:

{{#* inline  "IN_PROCESS"}}IN_PROCESS{{/inline}}
{{#* inline  "DONE"}}DONE{{/inline}}

{{> IN_PROCESS }}
{{> DONE }}

但是,我无法弄清楚如何将其与我所了解的here()动态值语法结合起来。

类似,

{{> (data.status) }}
     └─────────┘ data.status would be either 'IN_PROCESS' or 'DONE'

这可能吗?

1 个答案:

答案 0 :(得分:1)

我相信您想要与此类似的东西:

{{#* inline  "IN_PROCESS"}}IN_PROCESS{{/inline}}
{{#* inline  "DONE"}}DONE{{/inline}}

{{> (lookup . 'status')}}

{{> (lookup . 'status')}}将遍历JSON data对象的status属性。 也就是说,如果您要通过以下方式传递数据:

var template = Handlebars.compile(**your source**);
$('body').append(template(data));

JSFiddle Example

点表示已传递到模板函数中的数据对象。模板函数无法知道对象的名称:

template(inputData){
    // This function wouldn't know that inputData.status was originally data.status
}
var data = {status: "DONE"};
template(data);

因此,当搜索父项时,该点用于告诉“模板” inputData应该是父项,而我们正在寻找“ status”作为子项。我相信这是它的用途。我实际上找不到有关其用法的任何文档,但是所有查找的格式似乎都是lookup parent child,所以我认为这就是原因。