Meteor.js / spacebars - 为什么在使用参数/变量调用模板时数据上下文会发生变化?

时间:2015-04-19 23:57:16

标签: meteor meteor-blaze spacebars

我有一个子模板,标签:

<template name="label">{{name}}</template>

我包含在父模板中(其数据上下文定义name),如下所示:

答: <template name="parent">{{> label}}</template>

我想从父母那里设置例如宽度。为此,我为它提供了一个宽度参数:

B: <template name="parent">{{> label width="100%"}}</template>

B 中,标签模板丢失了父级的数据上下文,{{name}}现在未定义。在 A 中,它维护数据上下文并正常工作。为什么?

除了这个不受欢迎的解决方案,我还能做些什么来解决这个问题:

这有效,但我不想这样做:

<template name="parent">{{> label data=this width="100%"}}</template>
<template name="label">{{data.name}}</template>

1 个答案:

答案 0 :(得分:4)

传递给模板的参数是数据上下文。如果未传递参数,则数据上下文默认为this,即调用方的当前数据上下文。此外,label模板不会使用传递给它的宽度,如果您不自己使用它。固定代码:

<template name="parent">{{> label name=name width="100%"}}</template>
<template name="label"><span width={{width}}>{{data.name}}</span></template>