2013-03-11 29 views
10

Trong nhiều mẫu, tôi muốn sử dụng các hàm giống nhau, nhưng chúng phải được định nghĩa trong mọi mẫu. như thế này:Làm cách nào để xác định chức năng trình trợ giúp mẫu toàn cục?

function getNodesById(id){ 
    return collection.find({sid:id}).fetch(); 
} 

Template.navigation.getNodesById= function(id){ 
    return getNodesById(id); 
} 

Template.body.getNodesById= function(id){ 
    return getNodesById(id); 
} 

Html:

<Template name="navigation"> 
... 
{{#each getNodesById '1'}} 
... 
{{/each}} 
... 
</Template> 
<Template name="body"> 
... 
{{#each getNodesById '1'}} 
... 
{{/each}} 
... 
</Template> 
... 
<Template name="..."> 
..... 
</Template> 

Có phải có bất cứ cách nào có thể định nghĩa template function globle thay vì một mẫu? chỉ thích nó: Trong javascript:

 
    defined global tempele.functionA = function(...){ 
     return ... 
    } 

trong html:

<Template name ="a"> 
    {{#each functionA ...}} 
    {{/each }} 
</Template> 

<Template name ="b"> 
    {{#each functionA ...}} 
    {{/each }} 
</Template> 
<Template name="..."> 
    {{ #.. functionA ...}} 
     .... 
    {{/...}} 
</Template > 

Tôi có thể làm điều này? Tôi hy vọng tôi đã mô tả vấn đề một cách rõ ràng.

Trả lời

14

Bạn có thể trực tiếp đăng ký người trợ giúp của mình bằng tay lái. Đây là những gì tôi đang sử dụng để hiển thị địa chỉ email của người dùng hiện tại:

Handlebars.registerHelper('currentUserName', function() { 
    var user = Meteor.user(); 
    if (_.isUndefined(user) || _.isNull(user)) { 
     return new Handlebars.SafeString("<i class='icon-spin icon-spinner'></i> Login"); 
    } 
    return user.emails[0].address; 
}); 

Trong bất kỳ mẫu nào tôi chỉ gọi {{currentUserName}}. Đối với bạn, đó là

Handlebars.registerHelper('getNodeById', function (id) { 
    return collection.find({sid:id}).fetch(); 
}); 

Lưu ý: xem bạn muốn sử dụng nó như thế nào, bạn có thể đã có ý tưởng sai thiên thạch. Meteor được định hướng dữ liệu - không cố gắng thực thi các mô hình hướng dòng chảy. Nếu bạn thiếu một số dữ liệu trong các mẫu của mình, bạn nên thay đổi nguồn dữ liệu, chứ không phải chỉ lấy dữ liệu trong các mẫu của bạn.

+0

Cám ơn nhắc nhở của bạn, tôi nghĩ rằng tôi đã sai ở start.Meteor là hướng dữ liệu, tôi sẽ kee p mà trong mind。Cảm ơn bạn! –

3

Đối với Meteor 0.8 hoặc cao hơn, sử dụng UI.registerHelper sẽ thực hiện công việc.

13

Kể từ Meteor 1.0, tài liệu here hướng dẫn các nhà phát triển sử dụng Template.registerHelper để xác định người trợ giúp mẫu có sẵn trên toàn cầu.

Vì vậy, trong trường hợp của câu hỏi này, định dạng mã đúng sẽ là:

Template.registerHelper("getNodesById", function(id) { 
     return collection.find({sid: id}); 
    } 

Sau đó, bạn có thể tham khảo mẫu này helper trong bất kỳ mẫu của bạn trong hai cách sau:

{{getNodesById '1'}} 

hoặc

{{#each getNodesById '1'}} 
     ... 
    {{/each}} 
Các vấn đề liên quan