2012-01-13 41 views
5

Tôi cố gắng để template mảng sau đây của đối tượng:Moustache khuôn mẫu với một mảng của các đối tượng

var arr = [{name:"Ryan Pays", url:"http://www.ryanpays.com"}, {name:"foo", url:"http://www.google.com"}]; 

tôi chuyển đổi mảng đến một đối tượng như vậy:

arr = $.extend({}, arr); 

nào mang lại cho tôi những điều sau đây đối tượng:

{ 
0:{name:"Ryan Pays", url:"http://www.ryanpays.com"}, 
1:{name:"foo", url:"http://www.google.com"} 
} 

Sử dụng Mustache tôi muốn liệt kê đối tượng đó với mẫu sau:

var template = "<h4>Your friends' choices</h4>" + 
       "<ul>" + 
       "<li>" + 
       "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
       "</li>" + 
       "</ul>"; 
var html = Mustache.to_html(template, displayData); 
$('.choices').html(html); 

Tôi dường như không thể làm điều đó. Tôi có thể nhận được kết quả đầu tiên như in như vậy:

var html = Mustache.to_html(template, displayData[0]); 

Và vân vân nhưng không được cả hai.

liên kết thay vì chỉ violong của vấn đề này:

http://jsfiddle.net/AtJDa/

+8

"Tôi Ria mép bạn một câu hỏi .." - xin lỗi, tôi không thể cưỡng lại – bobobobo

+0

bên Mỹ được tách :) – RyanP13

Trả lời

16

Bạn có thể sử dụng mẫu cho các mảng:

var template = "<h4>Your friends' choices</h4>" + 
    "<ul>" + 
      "{{#arr}}"+ 
      "<li>" + 
      "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
      "</li>" + 
      "{{/arr}}"+ 
    "</ul>"; 
var html = Mustache.to_html(template, {arr:arr}); 
+0

đó làm việc như một nét duyên dáng. Thậm chí không thể thấy tính năng này được ghi lại. Cái này hoạt động ra sao? – RyanP13

+0

Xin lỗi tôi đã biết điều gì đang diễn ra :) – RyanP13

+0

Cảm ơn bạn nikoshr, điều này đã giải quyết được vấn đề của tôi khi làm việc với một nguồn cấp dữ liệu JSON do github sản xuất .. – Zander

5

Bạn cần phải sử dụng Moustache tích hợp trong khả năng lặp lại:

var template = "<h4>Your friends' choices</h4>" + 
       "<ul>{{#friends}}" + 
       "<li>" + 
        "<p><strong>{{name}}</strong> likes <a href='{{url}}'>this</a></p>" + 
       "</li>" + 
       "{{/friends}}</ul>"; 

var data = {friends: [{name:"Ryan Pays", url:"http://www.ryanpays.com"}, {name:"foo", url:"http://www.google.com"}]}; 

var html = Mustache.to_html(template, data); 

http://jsfiddle.net/AtJDa/1/

nước sốt bí mật là trong khai báo phần {{#friends}}

+0

Tôi không thực sự có quyền truy cập vào đối tượng ở cấp đó trong ứng dụng. Xấu của tôi vì không xác định rằng trong câu hỏi ban đầu. – RyanP13

+0

Tôi gặp vấn đề tương tự và tôi biết giải pháp là gì (sử dụng công cụ lặp đi lặp lại) nhưng vấn đề của tôi là tôi không có "Xử lý" trên dữ liệu như "bạn bè" trong ví dụ của bạn. Từ việc xem xét JSON trả về trong Firebug, không có tên trên mảng JSON. Bộ sưu tập của tôi chỉ bắt đầu như '[{name:" Ryan Pays ",' không '{bạn bè: [{name:" Ryan Pays ",' có điều gì tôi có thể thực hiện trên máy chủ WebAPI của mình để đặt tên bộ sưu tập không? – Jammer

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