是否可以将车把表达式值传递给子表达式?
Is it possible to pass in a handlebar expression value to a sub-expression?
如果我的父上下文可以访问 属性(索引),我可以将它传递给子表达式吗?我似乎无法让它工作。我已经确认 with block 可以使用传递给它的静态值 (1)
// Parent template
-----------------------------------------------------------------------------
{#child {{../report.ResourceName}}--{{Name}} @data.parentIndex={{@index}} }
// Child template
-----------------------------------------------------------------------------
{{parentIndex}} // displays correctly as 2
// does not render
{{#with (lookup report.sections parentIndex)}}
Rendered: {{name}}
{{/with}}
// renders correctly
{{#with (lookup report.sections 2)}}
Rendered: {{name}}
{{/with}}
当您在子模板调用中使用动态数据(如每次迭代中的索引)时,您必须小心,因为事情可能不会如您所愿。
例如当使用这样的东西时
{{#each report.sections}}
{#child child @data.parentIndex={{@index}} }
<br />
{{/each}}
传递给实际子模板的是 "parentIndex": "0 "
,它可能并不明显,但是当您使用 @data.parentIndex
语法传递数据时,任何 space 都很重要,因为您使用的是 {#child child @data.parentIndex={{@index}} }
最后包含一个 space (}
),那么最终值包含 space.
传递它的正确方法应该是 {#child child @data.parentIndex={{@index}}}
但这会引发把手错误,因为它会被子调用语法的括号混淆。
工作方式是这样的:
父模板:
{{#each report.sections}}
{{{callChild @index}}}
<br />
{{/each}}
父模板的助手:
function callChild(parentIndex) {
return '{#child child @data.parentIndex=' + parentIndex + '}'
}
子模板:
{{parentIndex}}
{{#with (lookup report.sections parentIndex)}}
Rendered: {{name}}
{{/with}}
之所以可行,是因为我们避免了车把被括号语法混淆,我们通过使用助手动态构建子调用来做到这一点,该助手最终在车把处理完模板后得到解析。
最后here是这个案例的活生生的例子
希望对你有帮助。
如果我的父上下文可以访问 属性(索引),我可以将它传递给子表达式吗?我似乎无法让它工作。我已经确认 with block 可以使用传递给它的静态值 (1)
// Parent template
-----------------------------------------------------------------------------
{#child {{../report.ResourceName}}--{{Name}} @data.parentIndex={{@index}} }
// Child template
-----------------------------------------------------------------------------
{{parentIndex}} // displays correctly as 2
// does not render
{{#with (lookup report.sections parentIndex)}}
Rendered: {{name}}
{{/with}}
// renders correctly
{{#with (lookup report.sections 2)}}
Rendered: {{name}}
{{/with}}
当您在子模板调用中使用动态数据(如每次迭代中的索引)时,您必须小心,因为事情可能不会如您所愿。
例如当使用这样的东西时
{{#each report.sections}}
{#child child @data.parentIndex={{@index}} }
<br />
{{/each}}
传递给实际子模板的是 "parentIndex": "0 "
,它可能并不明显,但是当您使用 @data.parentIndex
语法传递数据时,任何 space 都很重要,因为您使用的是 {#child child @data.parentIndex={{@index}} }
最后包含一个 space (}
),那么最终值包含 space.
传递它的正确方法应该是 {#child child @data.parentIndex={{@index}}}
但这会引发把手错误,因为它会被子调用语法的括号混淆。
工作方式是这样的:
父模板:
{{#each report.sections}}
{{{callChild @index}}}
<br />
{{/each}}
父模板的助手:
function callChild(parentIndex) {
return '{#child child @data.parentIndex=' + parentIndex + '}'
}
子模板:
{{parentIndex}}
{{#with (lookup report.sections parentIndex)}}
Rendered: {{name}}
{{/with}}
之所以可行,是因为我们避免了车把被括号语法混淆,我们通过使用助手动态构建子调用来做到这一点,该助手最终在车把处理完模板后得到解析。
最后here是这个案例的活生生的例子
希望对你有帮助。