2013-07-17 27 views
7

Tôi có một mẫuMeteor template.rendered và this.data truy cập

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

render với

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

Khi tôi cố gắng truy cập vào this.data trong

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

tôi nhận được 'chưa xác định'.

Cách chính xác để nhận được ví dụ: vendor.namevendor.address trong Template.order.rendered?

Cảm ơn bạn.

Trả lời

4

Trong Template.rendered, this.data tương ứng với dữ liệu mẫu được "cho ăn" với tham số hoặc sử dụng cấu trúc {{#with}}. Nhà cung cấp chỉ là một hàm trợ giúp trả về dữ liệu có sẵn trong mẫu đơn đặt hàng, nhưng không được liên kết với "this.data". SO để giải quyết vấn đề của bạn, bạn có một số tùy chọn:

Xác định mẫu mẹ và di chuyển người trợ giúp nhà cung cấp cho phụ huynh này, bạn có thể gọi theo thứ tự với nhà cung cấp làm tham số hoặc sử dụng {{#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); 
}; 

Bạn cũng có thể đăng ký một helper toàn cầu, loại bỏ sự cần thiết của một mẫu Encapsulating mẹ:

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

Cảm ơn bạn đã giải thích tốt TẠI SAO this.data có sẵn trong mẫu bằng cách sử dụng '{{#with}}' hoặc '{{#each}}' và không có sẵn khi các trường mẫu được hiển thị với người trợ giúp. Bây giờ nó rõ ràng hơn với tôi :) – joystick

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

này chỉ hoạt động;) Tuyệt vời! – joystick

Các vấn đề liên quan