流星空间栏无法访问父上下文

时间:2015-04-07 07:16:42

标签: meteor meteor-blaze spacebars

为什么这不起作用?

Template.tests.helpers
  test_value: -> "Test"
  contacts: -> Contacts.find()
  contact: -> Contacts.findOne()

示例1:

<template name="tests">
    {{test_value}}
    {{#with contact}}
            <p>{{firstname}}</p>
            <p>{{../test_value}}</p>
    {{/with}}
</template>
联系人内部的

../ test_value未呈现

示例2

<template name="tests">
    {{>testContact}}
</template>

<template name="testContact">
    {{test_value}}
    {{#with contact}}
        <p>{{firstname}}</p>
        <p>{{../test_value}}</p>
    {{/with}}
</template>

此示例中没有任何作用。我假设如果testContact模板中没有定义数据上下文,它将继承其父级的数据上下文。

示例3

<template name="tests">
    {{>testContact}}
</template>

<template name="testContact">
    {{test_value}}
    {{#with ../contact}}
        <p>{{firstname}}</p>
        <p>{{../test_value}}</p>
    {{/with}}
</template>

也不起作用。

这让我发疯了!

修改

示例4

<template name="tests">
    {{#with contact}}
        {{> testContact}}
    {{/with}}
</template>

<template name="testContact">
    <p>{{firstname}}</p>
    <p>{{../test_value}}</p>
    </p>
</template>

在这里,我可以看到数据上下文是testContact模板中的联系人。我希望{{../ test_value}}可以正常工作,因为test_value与我帮助程序中的联系人处于同一级别,但它没有。

示例5

<template name="tests">
    {{#each contacts}}
        {{> testContact}}
    {{/each}}
</template>

<template name="testContact">
    <p>{{firstname}}</p>
    <p>{{../test_value}}</p>

</template>

1 个答案:

答案 0 :(得分:1)

在testvalue之前不使用../尝试示例1。

助手与数据上下文不同,这就是为什么示例2和3不起作用的原因。

如果测试值辅助函数依赖于父上下文,那么您必须使用../将参数传递给testvalue帮助器。