2013-07-17 17 views
7

は私が流星template.renderedとthis.dataアクセス

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

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

でレンダリングテンプレートを持っています'未定義'。

vendor.nameおよびvendor.addressTemplate.order.renderedで?

ありがとうございます。

答えて

4

Template.renderedでは、this.dataは、テンプレートとして{{#with}}構文を使用してテンプレートがフィードされたデータに対応します。 ベンダーは、注文テンプレートで利用可能なデータを返すヘルパー関数ですが、 "this.data"にバインドされていません。 あなたの問題を解決するには、多くのオプションがあります:

親テンプレートを定義し、この親にベンダーヘルパーを移動すると、パラメータとしてvendorを使用して注文を呼び出すことも、{{##ブロック}}

<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" 
    }; 
}); 
+0

良い説明ありがとうございますthis.dataは '{{#}}'や '{{#each}} 'を使ってテンプレートで利用でき、テンプレートフィールドがヘルパーでレンダリングされるときには利用できません。今それは私にもっと明確です:) – joystick

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

これは単なる作品;)素晴らしいです! – joystick