2012-10-25 25 views
10

Tôi muốn sử dụng Mustache để hiển thị một danh sách không có thứ tự HTML chỉ khi một đối tượng danh sách không rỗng. Vì vậy, tôi muốn:Moustache render list nếu không rỗng

<ul> 
    <li>item 1</li> 
    <li>item 2</li> 
</ul> 

nếu danh sách có yếu tố và nếu danh sách rỗng (thậm chí không thẻ ul)

Làm thế nào tôi có thể làm điều này?

chỉnh sửa: cấu trúc dữ liệu của tôi là:

{ "list": ["first item", "second item"] } 
+0

Tôi tin rằng đây là những gì bạn đang tìm kiếm http://stackoverflow.com/questions/10102931/mustache-templates-how-to-output-a-block-only-once-for-non- danh sách trống/10118092 # 10118092 – maxbeatty

+0

Đó là một cách tiếp cận thú vị, nhưng tôi hy vọng có cách để làm điều này mà không sửa đổi cấu trúc dữ liệu của tôi –

+0

Bạn có thể thêm cấu trúc dữ liệu vào câu hỏi của mình không? – maxbeatty

Trả lời

5

Bạn cần phải định dạng lại cấu trúc dữ liệu của bạn như thế này:

{ 
    "list": { 
     "items": ["first item", "second item"] 
    } 
} 

mẫu Moustache của bạn bây giờ sẽ là này

{{#list}} 
    <ul> 
     {{#items}} 
      <li>{{.}}</li> 
     {{/items}} 
    </ul> 
{{/list}} 

tôi đã thực hiện một video giải thích cách thức hoạt động của Mustache và cách thực hiện nó bằng cách sử dụng cả PHP và JavaScript. Bạn có thể tìm thấy ở đây: http://mikemclin.net/mustache-templates-for-php-and-javascript/

+2

Có vẻ như không hợp lý khi yêu cầu mọi người định dạng lại cấu trúc dữ liệu của họ để phù hợp với khuôn mẫu ngôn ngữ. – Alper

+1

Tôi đồng ý. Đó là lý do tại sao cá nhân tôi sẽ chọn một ngôn ngữ mẫu khác. Tuy nhiên, nếu bạn muốn sử dụng Mustache, đây là cách thực hiện. Tôi thích giải pháp của brook tốt hơn, nhưng tôi không chắc chắn rằng thuộc tính 'length' luôn luôn có sẵn. Tôi nghĩ rằng nó có thể là một nâng cao được bổ sung bởi việc thực hiện Javascript. Tôi đã không thể tìm thấy bất kỳ đề cập đến nó trong hướng dẫn sử dụng Mustache: https://mustache.github.io/mustache.5.html. –

18

Nếu bạn không muốn hoặc không thể định dạng lại dữ liệu của mình, bạn cũng có thể chỉ cần kiểm tra items.length trước khi hiển thị thẻ <ul>. Một số người cau mày về điều này, nhưng nó chắc chắn là một thay thế cho câu trả lời của Mike.

{{#items.length}} 
    <ul> 
     {{items}} 
      <li>{{property}}</li> 
     {{/items}} 
    </ul> 
{{/items.length}} 
+0

Hoặc .size nếu bạn đang sử dụng phiên bản Java –

+0

Tôi đang sử dụng api của người khác và không thể thay đổi nó. '.length' hoạt động cho tôi. –

+0

Chỉ cần thử giải pháp này trên http://trymustache.com/ và tôi nhận được lỗi sau: Moustache lỗi: Phần không được tiết lộ "items.length" tại 87 –

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