Meteor template.rendered and this.data access

meteor

Solution

In Template.rendered, this.data corresponds to the data the template was "fed" with, either as a parameter or using the {{#with}} construct. vendor is just a helper function returning data available in the order template, but not binded to "this.data". SO to solve your problem, you have a number of options :

Defining a parent template and moving the vendor helper to this parent, then you can alternatively call order with vendor as a parameter or use a {{#with block}}

<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);
};

You can also register a global helper, eliminating the need for an encapsulating parent template :

Handlebars.registerHelper("vendor",function(){
    return{
        name:"Chanel",
        address:"Paris"
    };
});

Problem

I have a template ``` <template name='order'> {{vendor.name}} </template> ``` rendered with ``` Template.order.vendor = function () { return {name: 'Chanel', address: 'Paris' }; }; ``` When I try to access this.data in ``` Template.order.rendered = function () { console.log(this.data); }; ``` I get 'undefined'. What is the correct way of getting e.g. `vendor.name` and `vendor.address` in `Template.order.rendered`? Thank you.

Original source