2016-05-26 9 views
1

Ich könnte hier ein wenig überarbeitet sein, aber jeder Einblick, wie man diese Arbeit machen würde geschätzt.Etwas wie "wählen" von "wo" mit Lenker.js

Verwenden von handlebars.js als Template-Engine Ich brauche eine json Datei abzufragen und von hier durch eine Schleife Array innerhalb eines Objekt in der Datei. Die Strömung wird bestimmt, wie zu arbeiten: Wenn ein Wert über data-attribute auf auf Definieren einstimmt eine Zeichenfolge innerhalb einesObjektarray dann die Schleife und zeigen Daten auf der Grundlage dieser Bedingungen.

Im Grunde brauche ich eine Abfrage es, wie ich auf eine Datenbank Back-End würde, (mit Laravel) z:

$attr = "Red"; 
$prodcuts = DB::table('products')->Where('tags', $tag)->get(); 

ich aus einer sehr großen json Datei zu diesem arbeite. Zum Beispiel zuliebe habe ich ein viel kleineren, wenn Sie es Referenz willen braucht:

https://gist.github.com/Panoply/15dc30a9fc598d07b24f0f13a5d42df4

Ich bin mir bewusst, dass mit handlebars.js Ich brauche einen Helfer zu schaffen, um einen String mit einem Wert zu machen:

Handlebars.registerHelper("ifValue", function(conditional, options) { 
    if (conditional !== options.hash.equals) { 
    return options.fn(this); 
    } else { 
    return options.inverse(this); 
    } 
}); 

Dann würde ich meinen Lenker Schleife hat:

<ul> 
{{#each products}} 
{{#ifvalue tags equals='Blue'}} 

<li>{{title}}</li> 
<li>{{handle}}</li> 
<li>{{tags}}</li> 
{{#with images.[0]}}<li>{{src}}</li>{{/with}} 
{{#with variants.[0]}}<li>{{price}}</li>{{/with}} 

{{/ifvalue}} 
{{/each}} 
</ul> 

Ausgabe ist ich ein leeres Ergebnis. Sie können versuchen, diese Code-Block bei http://tryhandlebarsjs.com/ - Angesichts der Tatsache, dass die Tags in einer object array sind, könnte ich einige Konflikte haben.

Alle Ideen, wieder sehr geschätzt.

+0

ifValue Groß- und Kleinschreibung? Versuchen Sie auch, Inhalte in Ihrem {{else}} hinzuzufügen, um Ihre bedingte/inverse –

Antwort

1

Ich habe es herausgefunden. Lenker ist empfindlich. Wenn Sie über diese stolpern, hier ist, wie ich es fest:

Lenker:

{{#products}} 
{{#inArray tags "Red"}} 
    {{title}} 
{{#with images.[0]}}<img src="{{ this.src }}">{{/with}} 
{{/inArray}} 
{{/products}} 

Helper (Neues InArray):

Handlebars.registerHelper('inArray', function(array, value, options) { 
    if (array.indexOf.call(array, value) >= 0) { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    }; 
}); 
+0

zu testen Danke für das Follow-up, das musste ich heute wirklich wissen. – mwoodman