2013-07-17 161 views
7

我有一個模板流星template.rendered和this.data訪問

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

我得到「未定義」。

什麼是正確的方式獲得例如vendor.namevendor.address in Template.order.rendered

謝謝。

回答

4

在Template.rendered中,this.data對應於模板用作「參數」的數據,無論是作爲參數還是使用{{#with}}構造。 供應商只是一個幫助函數,用於返回訂單模板中可用的數據,但不綁定到「this.data」。 爲了解決您的問題,您有多種選擇:

定義父級模板並將供應商幫助程序移至此父級,則可以選擇使用供應商作爲參數調用訂單或使用{{#with塊}}

<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

感謝您的好解釋爲什麼在模板中使用'{{#with}}'或'{{#each}}'可以使用this.data,並且在使用助手呈現模板字段時不可用。現在對我來說更加清楚:) – joystick

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

這只是工程;)太好了! – joystick