2011-11-13 33 views
12

Tôi có một đối tượng thuộc tính kiểu hỗn hợp - một số chuỗi, một số mảng của chuỗi, một số đối tượng chứa mảng chuỗi - có khả năng có thể đi sâu nhiều cấp.Lặp lại đệ quy qua một đối tượng trong mẫu Jade?

Tôi muốn lặp qua tất cả các thuộc tính sao cho đối tượng tạo div, mảng tạo div, và thuộc tính chuỗi tạo một khoảng để chứa văn bản.

{ "string" : "some text", "object" : { "array" : [ "text" ] } } 

Đối tượng trên sẽ trả lại như:

<span>some text</span> 
<div> 
    <div> 
    <span>text</span> 
    </div> 
</div> 

Nhưng thường nhiều hơn nữa phức tạp cấu trúc. Làm thế nào tôi nên đi về việc hoàn thành điều này là Jade?

Trả lời

13

Đã lâu rồi bạn mới hỏi, nhưng mixin là bạn của bạn, tôi nghĩ vậy. Tôi đã không thử nó ra, nhưng nếu mixins hỗ trợ đệ quy, điều này sẽ làm việc:

mixin parseObject(obj) 
    div 
    - each val, key in obj 
     - if (typeof val === 'string') 
     span #{val} 
     - else if (typeof val === 'object') 
     mixin parseObject(val) 

Sau đó, trong cơ thể của tập tin .jade của bạn, hãy gọi mixin parseObject(rootObject).

+1

bên thứ 3 ở đây. Tôi đã thử điều này, nhưng mixin dường như không thích đệ quy: ( –

+0

@Robert Martin: Bây giờ là :) –

+0

Là poster gốc, tôi đã cập nhật mã của bạn để bao gồm 'mixin' (cảm ơn ** 0x80 **) và các tiền tố '-' thích hợp. –

5

Quá trình đệ quy dường như được hiển thị ngay bây giờ. Tôi đã sử dụng thành công chức năng này với một tinh chỉnh nhỏ; bạn cần sử dụng từ khóa mixin khi gọi hàm.

mixin parseObject(obj) 
    div 
    each val, key in obj 
     if typeof val === 'string' 
     span #{val} 
     else if typeof val === 'object' 
     mixin parseObject(val) 
5

Trong phiên bản hiện đại của Jade nó trông giống như

mixin parseObject(obj) 
    div 
    each val in obj 
     if typeof val === 'string' 
     span= val 
     else if typeof val === 'object' 
     +parseObject(val) 

Sau đó, trong cơ thể của tập tin .jade của bạn, hãy gọi

+parseObject(rootObject)

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