2013-02-23 54 views
21

Tôi muốn sử dụng tay lái #each với đối tượng không phải là mảng.Meteor và handlebars #each để lặp qua đối tượng

Tôi làm như thế nào? Tôi cần nó để vẫn làm việc với các tính năng đặc biệt của sao băng với #each.

đối tượng của tôi là theo hình thức:

{ 
    john: "hello", 
    bob: "hi there" 
} 

Tôi đang cố gắng để có được một kết quả như thế này:

<div>hello</div> 
<div>hi there</div> 
+0

Bạn có thể đăng những gì bạn đang sử dụng làm đối tượng không? Có thể không thể nếu bạn muốn lấy các thuộc tính của một đối tượng được lặp lại, nhưng bạn luôn có thể sử dụng '{{item.property}}' – Akshat

+0

@Akshat I đã đăng đối tượng của mình. Cảm ơn bạn đã giúp đỡ. – Harry

+3

** Hiện đã có hỗ trợ tích hợp cho ** này; xem http://stackoverflow.com/q/11884960/50079 – Jon

Trả lời

37

Bạn cần phải sử dụng một helper trong js của bạn để giúp tay lái hiểu đối tượng của bạn:

Thêm vào khách hàng của bạn js

Template.registerHelper('arrayify',function(obj){ 
    var result = []; 
    for (var key in obj) result.push({name:key,value:obj[key]}); 
    return result; 
}); 

Và sử dụng (bạn cũng có thể sử dụng phím với {{name}}) trong html của bạn:

{{#each arrayify myobject}} 
    <div title="hover here {{name}}">{{value}}</div> 
{{/each}} 

myobject xuất phát từ mẫu của bạn:

Template.templatename.helpers({ 
    myobject : function() { 
     return { john:"hello", bob: "hi there" } 
    } 
}); 
+0

Bất kỳ lợi thế nào khi thực hiện nó với một tay lái trợ giúp để thực hiện nó với các mẫu sao băng? – Harry

+1

Trình trợ giúp chỉ phải được khai báo một lần để làm việc trên tất cả các mẫu, trình trợ giúp mẫu chỉ làm việc cho một mẫu, do đó bạn sẽ phải redeclare nó mỗi lần. Tôi đã sử dụng nó trong trường hợp bạn quyết định sử dụng đối tượng trong nhiều mẫu hơn – Akshat

+0

API đã thay đổi, sử dụng 'Template.registerHelper()' thay vì 'Handlebars.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –

8

Bạn có thể chuyển đổi đối tượng của bạn vào mảng với gạch _.map

html:

<template name="test"> 
    {{#each person}} 
     <div>{{greeting}}</div> 
    {{/each}} 
</template> 

js:

Template.test.helpers({ 
    person : function() { 
     return _.map(object, function(val,key){return {name: key, greeting: val}}); 
    } 
}); 
4

Cần lưu ý cho những người tìm kiếm này bây giờ mà cách chính xác để khai báo các tay lái người giúp đỡ trong Meteor như các văn bản này là với phương pháp UI.registerHelper như trái ngược với Handlebars.registerHelper. Vì vậy, trình trợ giúp ở trên sẽ trông giống như sau:

UI.registerHelper("arrayify", function(obj){ 
    result = []; 
    for (var key in obj){ 
     result.push({name:key,value:obj[key]}); 
    } 
    return result; 
}); 
+4

Ngày nay nó là 'Template.registerHelper()' http://docs.meteor.com/#/full/template_registerhelper –

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