2016-11-02 5 views
1

Ich habe eine Reihe von Werten, zum Beispiel:Dust.js nicht Separator nach leeren Werten in Loop In

{ 
    "languages": [ 
    "", 
    "CSS", 
    "HTML", 
    "", 
    "JavaScript", 
    "Dust", 
    "", 
    "" 
    ] 
} 

Erwartete Leistung:

CSS, HTML, JavaScript, Dust 

Ist es möglich, in dem nicht-Separator nach leere Werte in meiner Staubvorlage, ohne einen benutzerdefinierten Helfer zu erstellen? Das Problem besteht darin, dass das Array eine beliebige Länge mit einer beliebigen Anzahl leerer Werte haben kann.

Antwort

0

Verwenden von nur eingebauten Helfern Sie

schreiben
{#languages} 
    {@ne key=. value=""}{.}{@sep}, {/sep}{/ne} 
{/languages} 

Dies wird jedoch eine baumelnde Komma verlassen, wenn das letzte Element im Array ein leeres ist. Wenn Sie das erste nicht-leere Element im Array finden können und diese Daten weitergeben, versuchen Sie diese eher-hässliche Version:

{#languages} 
    {@ne key=. value=""}{@sep}{@ne key=$idx value=firstNonBlankItem}, {/ne}{/sep}{.}{/ne} 
{/languages} 

Wenn firstNonBlankItem (oben 1 in Ihrem Beispiel) auf den richtigen Index gesetzt ist, Sie‘ Ich werde bekommen, was Sie wollen.

Andernfalls sollten Sie wirklich einen benutzerdefinierten Helfer schreiben - das ist es, was Dust Ihnen vorhat. Sie müssen den Helfer nicht einmal in Ihren Kontext aufnehmen; Stattdessen könnten Sie einen benutzerdefinierten globalen Helper schreiben und ihn in Ihr Javascript einfügen.

+0

Danke, ich dachte über diesen Ansatz nach, aber ich habe nicht gefunden, wie man "firstNonBlankItem" identifizieren kann. Es scheint, als wäre das Schreiben eines Helfers die einzige Lösung ... –

+0

Gibt es einen Grund, warum du keinen Helfer schreiben willst? Selbst wenn Sie Ihre Daten nicht ändern können, können Sie dem globalen 'dust.helpers'-Objekt sehr einfach einen Helfer hinzufügen. – Interrobang

+0

Sie müssten 'firstNonBlankItem' auf dem Server markieren und mit Ihren Daten einschließen. – Interrobang