Meteor模板渲染和this.data访问

7

我有一个模板

<template name='order'>
  {{vendor.name}}
</template>

使用

  Template.order.vendor = function () {
    return {name: 'Chanel', address: 'Paris' };
  };

当我尝试访问this.data时

Template.order.rendered = function () {
  console.log(this.data);
};

我得到了'undefined'。

Template.order.rendered中获取例如vendor.namevendor.address的正确方法是什么?

谢谢。

2个回答

4
在 Template.rendered 中,this.data 对应着模板被“传递”进来的数据,可以是通过参数或者使用 {{#with}} 构造传递进来的。 vendor 只是一个帮助函数,返回在 order 模板中可用的数据,但不与 "this.data" 绑定。 因此,解决你的问题,你有几种选择:
1. 定义一个父模板,将 vendor 帮助函数移到这个父模板中,然后你可以使用 vendor 作为参数调用 order 或使用 {{#with block}}。 2. 将 vendor 直接传递给 order 模板作为参数。 3. 在 Template.rendered 中手动调用 vendor 并将结果附加到 this.data 上。
<template name="parent">
    {{> order vendor}}
    {{#with vendor}}
        {{> order}}
    {{/with}}
</template>

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

Template.parent.vendor=function(){
    return{
        name:"Chanel",
        address:"Paris"
    };
};

Template.order.rendered=function(){
    // this.data == vendor object returned in parent helper
    console.log(this.data);
};

您还可以注册全局助手,消除了需要封装父模板的需求:
Handlebars.registerHelper("vendor",function(){
    return{
        name:"Chanel",
        address:"Paris"
    };
});

感谢您对“为什么在使用{{#with}}{{#each}}模板时,this.data可用,但在使用helpers呈现模板字段时不可用”的问题进行了很好的解释。现在我更加清楚了:) - joystick

0
Template.order.rendered = function () {
    console.log(Template.order.vendor());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接