2012-12-10 20 views
5

Ich erstelle einen Helfer, um 7 oder 8 Zeilen HTML auszugeben, um meine Vorlagen zu bereinigen (und DRY einzuhalten - hey, das reimte - wikka wikka).Lenker Helper in requireJS

Hier ist ein Beispiel für den Aufruf des Add-on-Helfers

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

nun von dem, was ich verstehe, alles nach dem Zusammenhang sollte ein Hash genannt Optionen. Hier ist ein Stub meiner addOn.js

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); 
}); 

ist jedoch Optionen nur auf mein erster Parameter übergeben werden. Wenn ich meine Methode Signatur ändern:

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

.. jeder meiner Werte gesetzt werden und Optionen wird nun ein Objekt mit einem leeren Hash.

Das Deklarieren der Parameter funktioniert explizit, aber ich würde lieber den Hash verwenden. Irgendwelche Gedanken darüber, wie man das macht?

Antwort

4

Von Handlebars doc on helpers:

A helper Lenker Aufruf ist eine einfache Kennung, gefolgt von null oder mehr Parameter (durch Leerzeichen getrennt). Jeder Parameter ist ein Handles Ausdruck.
[...]
Lenker Helfer können auch eine optionale Sequenz von Schlüssel-Wert-Paaren als ihren letzten Parameter erhalten (in der Dokumentation als Hash-Argumente bezeichnet). Die Schlüssel in den Hash-Argumenten müssen sein, einfache Bezeichner und die Werte sind Lenker-Ausdrücke. Dies bedeutet, dass Werte einfache Bezeichner, Pfade oder Zeichenfolgen sein können.

Um Ihre Parameter als Hash verwenden, würden Sie Ihren Helfer als

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

nennen und sie würden als options.hash in Ihrem Helfer

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

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

Ich habe auch gelesen, das Dokument zur Verfügung und ich habe es gerade verpasst. Danke Kumpel. –