为什么设置 Meteor 模板数据上下文会替换父数据上下文?
Why Does Setting Meteor Template Data Context Replace Parent Data Context?
我想将参数传递给我在循环中调用的模板:
<template name="show_people">
<div class="panel-body">
{{#each people}}
<div>
{{>person }}
{{>person doing="running up the hill"}}
</div>
{{/each}}
</div>
</template>
<template name="person">
<h3>{{name}} is {{doing}}</h3>
</template>
帮手javascript:
Template.show_people.helpers({
people: function() { return [{ name: 'Jack' },{ name: 'Jill' }]; }
});
向模板添加 'doing' 参数似乎破坏了循环项的上下文。这是我要回复的内容:
Jack is
is running up the hill
Jill is
is running up the hill
我希望人员模板能够访问参数和上下文。如何实现?
快速技巧:将名称参数传递给从父上下文复制的模板。
{{> person name=name doing="running up the hill"}}
接受的答案解决了您的问题,但没有解释为什么您会遇到现在的问题。如果您查看模板包含部分 header 下的 this article,您就会找到原因。
基本上,就在您的 {{#each people}}{{/each}}
代码块内部,任何包含模板的数据上下文将是 people
collection 中的列表项。对于您的前两个代码片段,people
的两个实例的两个数据上下文将是 {name: "Jack"}
和 {name: "Jill"}
,这就是您看到 [=15= 的原因] 和 Jill is
正在为这两个模板实例打印出来。数据上下文不包含 doing
参数。
当您以第二种方式 ({{> person doing='running up the hill'
) 引用您的 person
模板时,该模板实例的数据上下文将被重置,并创建一个仅具有指定参数的全新数据上下文。对于 person
模板的两个实例,数据上下文都是 {doing: "running up the hill"}
,这就是为什么您看到 is running up the hill
被打印了两次。
如您所见,数据上下文设置不是附加的,而是排他的。数据上下文要么是给定模板引用出现的代码块的 parent 数据上下文,要么是由模板引用中定义的所有参数组成的覆盖数据上下文。接受的答案之所以有效,是因为您将两个数据上下文组合到一个覆盖的数据上下文中,以在 person
模板中使用。
我想将参数传递给我在循环中调用的模板:
<template name="show_people">
<div class="panel-body">
{{#each people}}
<div>
{{>person }}
{{>person doing="running up the hill"}}
</div>
{{/each}}
</div>
</template>
<template name="person">
<h3>{{name}} is {{doing}}</h3>
</template>
帮手javascript:
Template.show_people.helpers({
people: function() { return [{ name: 'Jack' },{ name: 'Jill' }]; }
});
向模板添加 'doing' 参数似乎破坏了循环项的上下文。这是我要回复的内容:
Jack is
is running up the hill
Jill is
is running up the hill
我希望人员模板能够访问参数和上下文。如何实现?
快速技巧:将名称参数传递给从父上下文复制的模板。
{{> person name=name doing="running up the hill"}}
接受的答案解决了您的问题,但没有解释为什么您会遇到现在的问题。如果您查看模板包含部分 header 下的 this article,您就会找到原因。
基本上,就在您的 {{#each people}}{{/each}}
代码块内部,任何包含模板的数据上下文将是 people
collection 中的列表项。对于您的前两个代码片段,people
的两个实例的两个数据上下文将是 {name: "Jack"}
和 {name: "Jill"}
,这就是您看到 [=15= 的原因] 和 Jill is
正在为这两个模板实例打印出来。数据上下文不包含 doing
参数。
当您以第二种方式 ({{> person doing='running up the hill'
) 引用您的 person
模板时,该模板实例的数据上下文将被重置,并创建一个仅具有指定参数的全新数据上下文。对于 person
模板的两个实例,数据上下文都是 {doing: "running up the hill"}
,这就是为什么您看到 is running up the hill
被打印了两次。
如您所见,数据上下文设置不是附加的,而是排他的。数据上下文要么是给定模板引用出现的代码块的 parent 数据上下文,要么是由模板引用中定义的所有参数组成的覆盖数据上下文。接受的答案之所以有效,是因为您将两个数据上下文组合到一个覆盖的数据上下文中,以在 person
模板中使用。