2012-07-23 20 views
9

Xin chào các bạn!Hiển thị các mẫu trong người trợ giúp trong tay lái

Vì dường như không có câu trả lời về vấn đề này: Passing variables through handlebars partial nhưng hiện tại tôi đang giải quyết một chút để có được công việc này. Vì vậy, ý tưởng là để đăng ký một chức năng trợ giúp mà làm cho một mẫu cụ thể với các giá trị có thể. Mã bit giúp bạn hiểu rõ hơn.

Đây là cách tôi muốn gọi helper của tôi:

<div> 
    {{myHelper}} 
</div> 

helper này được đăng ký với mã này chút:

hbs.registerHelper(name, function (args) { 
    args = args || {}; 
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8')); 
    return template(args); 
}); 

tôi đặt snippiet này vào một vòng lặp để đăng ký giúp việc khác nhau tại Một lần. Điều này có nghĩa là 'tên' và 'tệp' được đưa ra.

Được rồi bây giờ tôi có thể làm một cái gì đó như thế này:

// 'values' could be something like this: 

var values = { headline: 'HEADLINE' } 

<div> 
    {{myHelper values}} 
</div> 

Trong vòng một helper bây giờ tôi có thể kiểm tra nếu một giá trị nhất định được đưa ra:

// myHelper template 

<div> 
    {{#if headline}} 
    <h1>{{headline}}</h1> 
    {{/if}} 
    <p>Lorem ipsum</p> 
</div> 

workaround nhỏ này làm việc cho tôi nhưng có một vấn đề. Đăng ký một trình trợ giúp như được giải thích ở trên, trả về một chuỗi thoát HTML đơn giản. Vì vậy, việc viện dẫn người trợ giúp không xuất ra đoạn mã HTML được hiển thị. Nó xuất ra HTML dưới dạng chuỗi thoát.

Có ai trong số các bạn có ý tưởng về cách tôi có thể làm cho đoạn mã của tôi trả về HTML dưới dạng HTML không?

/Pascal

Trả lời

20

Từ Handlebars doc:

tay lái sẽ không thoát khỏi một Handlebars.SafeString. Nếu bạn viết một trình trợ giúp tạo ra mã HTML riêng của nó, bạn thường sẽ muốn trả về một Handlebars.SafeString mới (kết quả). Trong tình huống như vậy, bạn sẽ muốn thoát tham số theo cách thủ công.

Hãy thử

hbs.registerHelper(name, function (args) { 
    args = args || {}; 
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8')); 

    // return new hbs.SafeString(template(args)); 
    // From @Maroshii 
    // the SafeString method must be accessed through hbs.handlebars 
    // and not directly through hbs 
    // https://github.com/donpark/hbs#handlebars 

    return new hbs.handlebars.SafeString(template(args)); 
}); 
+0

Vâng! Nó ổn với tôi! Cám ơn nhiều, ông bạn! – PascalPrecht

+10

Nếu nó hoạt động, đánh dấu câu trả lời cho phù hợp – brafales

+0

Chỉ trong trường hợp ai đó chạy vào điều này .... Phương thức 'SafeString' phải được truy cập thông qua' hbs.handlebars' và không trực tiếp thông qua 'hbs' ... đây là nút. người dùng js :) – Maroshii

24

Tôi chỉ muốn chỉ ra rằng việc sử dụng dấu ngoặc triple loại bỏ nhu cầu chạy bất kỳ phương pháp bổ sung để chuyển đổi sang HTML. Ví dụ, khi truy cập dữ liệu mẫu chỉ cần sử dụng dấu ngoặc nhọn ba {{{templateData}}}, cho phép bạn nhận HTML thô.

+0

Điều này đã giúp tôi tìm câu trả lời của mình! TY – Fasani

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