2016-05-09 7 views
0

Ich versuche, für ein Szenario zu lösen, wo Daten Tags enthalten können, die sich auf andere Daten beziehen. Also, wenn meine Staub Datei sah wie folgt aus:Tags innerhalb der Kontextdaten in Helfer

Document.title: {Document.title} 
cfg.title: {cfg.title} 
output: {#ctx key="{cfg.title}" /} 

und mein Kontext sieht wie folgt aus:

{ 
    cfg: { 
    title: '{Document.title}' 
    } 
    , Document: { 
    title: 'Here is my title' 
    } 
    , ctx: function(chunk, context, bodies, params){ 
    return context.resolve(params.key); 
    } 
} 

ich die folgende Ausgabe bekommen:

Document.title: This is the title 
cfg.title: {Document.title} 
output: 

Was meine „ctx tut "Hilfsfunktion muss aussehen, um es zur Ausgabe zu bringen" Hier ist mein Titel "? (Hinweis: Ich weiß, dass es einfacher wäre, auf Document.title zu verweisen, aber "cfg" und "Document" werden von verschiedenen Orten erzeugt und zum Zeitpunkt der Wiedergabe zusammengeführt)

Antwort

0

Irgendwann müssen Sie kompilieren (oder parse) das Minitemplate, das deine Konfiguration bildet. Hier ist ein möglicher Ansatz, wo ich dust.compile verwenden die Config im Voraus zu bauen:

{ 
    cfg: { 
    title: dust.compile('{Document.title}') 
    }, Document: { 
    title: 'Here is my title' 
    }, ctx: function(chunk, context, bodies, params){ 
    eval(params.key)(chunk, context); 
    } 
} 

Mit der Vorlage:

{#ctx key=cfg.title /} 

Beachten Sie, dass cfg.title sind vorbei direkt hier statt stringifying es first-- Dies ist wichtig, damit Sie nicht context.resolve verwenden müssen, um eine doppelte Suche durchzuführen.

Dieser Ansatz generiert keine Vorlage lesbar cfg.title, also wenn das für Sie wichtig ist, können Sie den dust.compile Schritt innerhalb der ctx Funktion verschieben.

+0

Dies wird funktionieren. Vielen Dank! Hinweis für alle, die diese Antwort finden, wenn Sie an Staub vor 2.7 arbeiten, müssen Sie einen zweiten Parameter zu dust.compile hinzufügen. –