2012-12-10 31 views
5

Tôi đang tạo một trình trợ giúp để xuất 7 hoặc 8 dòng HTML để làm sạch các mẫu của tôi (và tuân theo DRY - hey có vần - wikka wikka).Handlebars helper trong requireJS

Dưới đây là một ví dụ về cách gọi helper addon

{{#each promotion.CampaignColors}} 
    {{{addOn . CampaignColorType.Code CampaignColorType.Name HexColor "some content" "a title"}}} 
{{/each}} 

Bây giờ, từ những gì tôi hiểu, tất cả mọi thứ sau khi bối cảnh phải là một băm gọi là tùy chọn. Đây là một phần của addOn.js của tôi

define([ 
    'handlebars', 
    'hbs!templates/addOn', 
], function (Handlebars, AddOnTemplate) { 
    function addOn(context, options) { 
     var data = {}; 
     var compiledTemplate = AddOnTemplate(data); 
     console.log(compiledTemplate); 
     return compiledTemplate; 
    } 

    Handlebars.registerHelper('addOn', addOn); 
    return new Handlebars.SafeString(addOn); 
}); 

Tuy nhiên, các tùy chọn chỉ được đặt cho tham số đầu tiên của tôi được chuyển. Nếu tôi thay đổi chữ ký phương thức của mình thành:

function addOn(context, key, displayName, value, content, title, test, options) { 
... 
} 

.. mỗi giá trị của tôi đang được đặt và tùy chọn BÂY GIỜ trở thành đối tượng có băm rỗng.

Khai báo các tham số hoạt động rõ ràng, nhưng tôi muốn sử dụng hàm băm nhiều hơn. Bất kỳ suy nghĩ về cách làm điều này?

Trả lời

4

Từ Handlebars doc on helpers:

Một tay lái gọi helper là một định danh đơn giản, tiếp theo là zero hoặc nhiều tham số (cách nhau bằng khoảng trắng). Mỗi tham số là một biểu thức Handlebars .
[...]
Người trợ giúp tay lái cũng có thể nhận được một chuỗi khóa-giá trị tùy chọn làm thông số cuối cùng của chúng (được gọi là đối số băm trong tài liệu). Các khóa trong đối số băm phải là mỗi khóa là số nhận dạng đơn giản và các giá trị là biểu thức Handlebars. Điều này có nghĩa là các giá trị có thể là số nhận dạng đơn giản, đường dẫn hoặc Chuỗi.

Để sử dụng các thông số của bạn như là một hash, bạn sẽ gọi helper của bạn như

{{{addOn . Code=CampaignColorType.Code HexColor=HexColor Content="some content"}}} 

và họ sẽ có sẵn như options.hash trong helper bạn

define(['handlebars'], function (Handlebars) { 
    function addOn(context, options) { 
     console.log(options.hash); 
    } 

    Handlebars.registerHelper('addOn', addOn); 
    return new Handlebars.SafeString(addOn); 
}); 
+0

Tôi thậm chí đã đọc tài liệu mà và tôi đã bỏ lỡ nó. Cảm ơn bạn đời. –