2013-07-30 41 views
7

Tôi hiểu cách chuyển nguồn dữ liệu trong Handlebars nhưng tôi đã tình cờ gặp một tình huống mà tôi không thể làm việc.Handlebars.js - Nhận bối cảnh gốc trong vòng lặp, câu lệnh if và đối tượng con

Sử dụng "../" bạn có thể tiếp cận phạm vi mẫu gốc nhưng khi lặp qua con của đối tượng, nó có vẻ trả về đối tượng chứ không phải con.

{{#each content.items}} 
{{#if prop}} 
<p>{{prop}} + {{../../variable}}</p> 
{{/if}} 
{{/each}} 

Đoạn mã trên hoạt động tốt nếu bạn lặp thông qua một đối tượng được gọi là 'nội dung' nhưng ngay sau khi bạn lặp qua nó là đứa trẻ, 'content.items' nó không còn trả về phạm vi đúng.

Đây là một câu đố thể hiện sự cố. http://jsfiddle.net/sidonaldson/MDdn2/

Có ai có thể làm sáng tỏ điều gì sai không?

+0

Tôi không hoàn toàn chắc chắn những gì đang xảy ra với mã hiện tại của bạn, nhưng một giải pháp dễ dàng là sử dụng trình trợ giúp '{{with}}' để lưu phạm vi bên ngoài. Nó có lẽ sẽ dễ đọc hơn. – GJK

+0

GJK - nếu bạn muốn demo rằng trong một câu trả lời tôi sẽ đánh dấu nó như vậy. Kinda nghe như những gì tôi cần! – sidonaldson

+0

'# if' tạo một tổ mới để điều duy nhất tôi có thể nghĩ đến là nó bỏ qua tổ mẹ để chỉ ở trên nó. Im không chắc chắn nếu nó trả lời câu hỏi của bạn nhưng, cho hậu thế, thêm tổ #if và tổ nội dung vào đường dẫn dường như hoạt động ... '

{{prop}} + {{../../content/variable }}

'http://jsfiddle.net/MDdn2/3/ – Shanimal

Trả lời

2

Nó chỉ ra rằng suy nghĩ ban đầu của tôi là sai. Tôi đã chỉ sử dụng Handlebars.js bên trong bối cảnh của Ember.js. Ember cung cấp thêm một số người trợ giúp không có sẵn trong Handlebars đơn giản, vì vậy đó không phải là một lựa chọn. Nhưng tôi dường như đã tìm ra vấn đề của bạn. Kiểm tra this fiddle.

<p>IN CONTENT</p> 
{{#with content}} 
{{#each items}} 
{{#if prop}} 
<p>{{prop}} + {{../../variable}}</p> 
{{/if}} 
{{/each}} 
{{/with}} 
<p>OUTSIDE CONTENT</p> 
{{#each items}} 
{{#if prop}} 
    <p>{{prop}} + {{../../variable}}</p> 
{{/if}} 
{{/each}} 

Tôi không chắc chắn lý do tại sao nó không làm việc ở nơi đầu tiên, nhưng sử dụng with helper thì each helper dường như làm việc. Hy vọng rằng tôi đã đến gần những gì bạn muốn.

+0

Cảm ơn bạn đã trả lời nhưng bản demo không hoạt động! – sidonaldson

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