2016-03-25 8 views
1

ich mit Dust.js bin arbeiten und versuchen, die dust.makeBase Funktion zu verwenden, in einem verschmelzen und machen Daten aus zwei Arrays (DATAX und datay) newcontext Variable.Wie Daten aus aktuellen Kontext erhalten mit dust.js

var context = dust.makeBase(); 
var newcontext = context.push(datax) 
         .push(datay); 

Als Staub Dokumentation schob das letzte Feld (in meinem Beispiel die datay) der aktuelle Kontext werden. Starten auf jsFiddle Ich kann sehen, dass Daten aus dem aktuellen Kontext korrekt angezeigt werden.

Selfstorage Informationen

{#.} 
    {#data}{id} - {special_offer} 
    {/data} 
    {/.} 

jedoch, wenn ich Anzeigedaten kommt aus aktuellem Kontext offenbar werden die Daten nicht erreicht. Folgendes funktioniert nicht.

Selfstorage Einrichtungen

{#.} 
    {#facility} 
    {id} - {size} 
    {#facilityamenities.amenities}{amenities_id} - {full_desc}  
    {/facilityamenities.amenities} 
    {/facility} 
{/.} 


Ich habe einige Anweisungen bekam auf http://www.dustjs.com/guides/contexts/ aber es ist nicht genug.

Überprüfen einige Beispiele im Web Ich wurde Context Helfer und ich kam mit dieser Version auf jsfiddle und obwohl ein Funktionscode ausgeführt wird, ist das Ergebnis nicht wie erwartet. Unterhalb eines Stückes Code.

var context = dust.makeBase({"getselfdata": { 
"selfdata": function(chunk, context) 
{ 
    var price = context.get("facility.price_formatted"); 

    return price; 
} 
}}); 

Jede Hilfe ist zu schätzen.

+0

Ihre Frage war hervorragend strukturiert und gut geschrieben. – Interrobang

Antwort

0

Sie sind genau richtig, dass das letzte Element, das in den Kontext geschoben wird, zum aktuellen Kontext wird. Wenn Sie mehrere Elemente in den Kontext verschieben, gibt es keine Möglichkeit, sie nach Position zu referenzieren, z. B. "das Element, das in den Kontext vor diesem Kontext verschoben wurde".

Wenn Sie Dust eine Referenz angeben, die im aktuellen Kontext nicht existiert, sucht Dust in jedem vorherigen Kontext nach der Referenz. Dadurch können Sie den Kontextstapel nach oben gehen.

Ich habe zwei Änderungen an Ihrem Beispiel vorgenommen, damit es funktioniert. Für datax, wickelte ich das Array in einem Objekt mit einem Schlüssel, facilities:

{ "facilities": [ 
    { "facility": { ... } }, 
    { "facility": { ... } } 
]} 

Dann in Ihrer Vorlage, sagte ich zu Staub für diesen Hinweis suchen:

{#facilities} 
    {#facility} 
    <tr><td>{id} - {size} - {#facilityamenities}{#amenities} 
     {amenities_id} - {full_desc} 
    {/amenities}{/facilityamenities}</td></tr> 
    {/facility} 
{/facilities} 

Sie einen zusätzlichen Fehler hatte in dieser Vorlage. Für {#facilityamenities.amenities} arbeiten, müssten Sie Ihre Daten wie folgt aussehen:

{ "facilityamenities": { 
    "amenities": { ... } } 

jedoch Ihre "facilityamenities" ein Array ist, so stattdessen sollten Sie {#facilityamenities}{#amenities} so verwenden, dass Staub wird über facilityamenities erste Schleife und dann amenities suchen.

Mit diesen Änderungen funktioniert Ihre JSFiddle, wie ich glaube, Sie beabsichtigen.