2012-03-13 31 views
15

Tôi đang cố viết một trình trợ giúp câu lệnh if có điều kiện cho Handlebars.js. Về cơ bản, tôi muốn đặt một lớp "hoạt động" trên một liên kết nếu nó là trang Apply Now.Trình trợ giúp "if statement" có điều kiện cho Handlebars.js

Helper:

Handlebars.registerHelper('isApplyNow', function(block) { 
    if(this.title == "Apply Now") { 
     return block(this); 
    } else { 
     return block.inverse(this); 
    } 
    }); 

Và Mẫu:

<ul> 
    {{#each pages}} 
     <li> 
     {{#isApplyNow}} 
      <a href="{{url}}" class ='active'>{{this.title}}</a> 
     {{else}} 
      <a href="{{url}}">{{this.title}}</a> 
     {{/if}} 
     </li> 
    {{/each}} 
    </ul> 

Nhưng, tôi nhận được rất trần xương javascript lỗi:

Uncaught [object Object] in handlebars-1.0.0.beta.2.js:595 

bất cứ ai có thể xem nếu tôi viết điều này không đúng?

Cảm ơn!

bài viết tham chiếu:

Calling Helper Within If Block in Handlebars Template

http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/

Trả lời

20

Tôi thấy một sai lầm cú pháp nhỏ mà tôi tin rằng có thể là vấn đề. Nếu bạn định sử dụng một trình trợ giúp có một khối, thì bạn phải đóng nó bằng tên của trình trợ giúp. Xem làm thế nào tôi đã thay thế của bạn {{/if}} với {{/isApplyNow}}, như vậy:

{{#isApplyNow}} 
     <a href="{{url}}" class ='active'>{{this.title}}</a> 
    {{else}} 
     <a href="{{url}}">{{this.title}}</a> 
    {{/isApplyNow}} 
+0

Ahh duh, tôi sẽ thử điều này một chút khi tôi quay lại phía đó của ứng dụng. Cảm ơn! – wart

+0

Thats it! Cảm ơn kaptron. – wart

1

LƯU Ý: khối (this) trong helper sẽ không hoạt động nữa. Thay vào đó, hãy sử dụng block.fn (this)

ví dụ:

Handlebars.registerHelper('isApplyNow', function(block) { 
    if (this.title === "Apply Now") 
     return block.fn(this); 
    else 
     return block.inverse(this); 
}); 
Các vấn đề liên quan