Gibt es eine Möglichkeit im LENKER JS zu integrieren, die logische Operatoren in der standard handlebars.js bedingte operator? So etwas wie dieses:
{{#if section1 || section2}}
.. content
{{/if}}
Ich weiß, ich könnte schreiben, dass meine eigenen Helfer, sondern zunächst möchte ich sicherstellen, dass ich bin nicht das Rad neu erfinden.
InformationsquelleAutor der Frage Mike Robinson | 2012-01-13
Dies ist möglich durch 'Cheaten' mit einem block Helfer. Dies geht wahrscheinlich gegen die Ideologie der Menschen, die entwickelt LENKER.
Können Sie dann rufen Sie die Helfer in der Vorlage wie diese
InformationsquelleAutor der Antwort Nick Kitto
Wobei die Lösung einen Schritt weiter. Dies fügt die compare-operator.
Verwenden Sie es in ein template wie dieses:
Kaffee-Script-version
InformationsquelleAutor der Antwort
LENKER verschachtelte Operationen. Dies bietet viel Flexibilität (und sauberer code), wenn wir schreiben unsere Logik ein wenig anders.
In der Tat, wir können hinzufügen, alle Arten von Logik:
Registrieren Sie sich einfach diese Helfer:
InformationsquelleAutor der Antwort kevlened
Gibt es eine einfache Möglichkeit dies zu tun, ohne zu schreiben eine helper-Funktion... Es kann getan werden, in der Vorlage vollständig.
Edit: Umgekehrt können Sie tun, oder ist dies zu tun:
Bearbeiten/Hinweis: die LENKER der website: handlebarsjs.com hier sind die falsy-Werte:
InformationsquelleAutor der Antwort jQwierdy
Ein problem mit all den Antworten, die hier gepostet ist, dass Sie nicht arbeiten mit gebundenen Eigenschaften, d.h. die if-Bedingung wird nicht neu bewertet, wenn die Eigenschaften, verändern sich die beteiligten. Hier ist eine etwas erweiterte version des Helfer unterstützen Bindungen. Es verwendet die binden Funktion aus der Glut Quelle, die auch um die Umsetzung der normale Ember
#if
Helfer.Dieser ist nur eine einzige Schranke-Eigenschaft auf der linken Seite, im Vergleich zu einer Konstanten auf der rechten Seite, die ich denke, ist gut genug für die meisten praktischen Zwecke. Wenn Sie etwas weiter Fortgeschritten ist, als ein einfacher Vergleich, dann wäre es vielleicht gut zu starten deklarieren einige berechnete Eigenschaften und Verwendung der normalen
#if
Helfer statt.Können Sie es verwenden, wie diese:
InformationsquelleAutor der Antwort devongovett
Verbesserte Lösung, die im Grunde die Arbeit mit jedem binären operator (mindestens zahlen, strings funktioniert nicht gut mit eval, KÜMMERN sich um MÖGLICHE SCRIPT-INJECTION bei VERWENDUNG EINES NICHT DEFINIERTEN-BETREIBER MIT USER-INPUT):
InformationsquelleAutor der Antwort Vincent
Hier ist ein link, um den block, helper, die ich benutze: Vergleich block Helfer. Es unterstützt alle standard-Operatoren und können Sie code schreiben, der, wie unten gezeigt. Es ist wirklich ganz praktisch.
InformationsquelleAutor der Antwort CleanTheRuck
Hier ist eine Lösung, wenn Sie wollen, überprüfen Sie mehrere Bedingungen:
Verwendung:
InformationsquelleAutor der Antwort Sateesh Kumar Alli
Ähnlich wie Jims Antwort, sondern eine mit ein wenig Kreativität könnten wir auch etwas wie das hier tun:
Einsetzen, dann bekommen wir so etwas wie:
Ich würde vorschlagen, bewegen Sie das Objekt aus der Funktion für eine bessere Leistung, aber sonst können Sie keine compare-Funktion, die Sie wollen, inklusive "und" und "oder".
InformationsquelleAutor der Antwort ars265
Eine andere alternative ist die Verwendung der Funktion Namen in
#if
. Die#if
wird erkannt, wenn der parameter Funktion, und wenn es ist, dann wird Sie es nennen, und verwenden Sie seine Rückkehr für truthyness überprüfen. Unten myFunction wird aktuellen Kontext alsthis
.InformationsquelleAutor der Antwort ShitalShah
Installieren Ember Wahrheit Helfer addon durch ausführen der nachstehenden Befehl
können Sie beginnen, verwenden die meisten der logischen Operatoren(eq,nicht-eq,nicht,und,oder,gt,gte,lt,lte,xor).
Können Sie sogar mit Teilausdruck weiter zu gehen,
InformationsquelleAutor der Antwort kumkanillam
Kann ich verstehen, warum Sie möchten, um zu erstellen ein Helfer für die Situationen, in denen Sie eine große Anzahl von vielfältigen vergleichen innerhalb Ihrer Vorlage, aber für eine relativ geringe Anzahl der Vergleiche (oder sogar ein, das war es, was brachte mich zu dieser Seite in den ersten Platz), es würde wahrscheinlich einfacher sein, zu definieren, einen neuen LENKER variable im view-rendering-Funktion aufrufen, wie:
Pass-LENKER auf render:
und dann in den LENKER Vorlage:
Ich erwähne dies, der Einfachheit halber, und auch weil es eine Antwort, die kann schnell und hilfreich, während immer noch die Einhaltung der logicless Natur der LENKER.
InformationsquelleAutor der Antwort Programmer Dan
Ich gefunden habe, ein npm-Paket gemacht mit CoffeeScript, hat eine Menge von unglaublichen nützliche Helfer für den LENKER. Werfen Sie einen Blick in die Dokumentation die folgende URL:
https://npmjs.org/package/handlebars-helpers
Können Sie eine
wget http://registry.npmjs.org/handlebars-helpers/-/handlebars-helpers-0.2.6.tgz
herunterladen Sie und sehen Sie den Inhalt des Pakets.Werden Sie Behinderte, Dinge zu tun, wie
{{#is number 5}}
oder{{formatDate date "%m/%d/%Y"}}
InformationsquelleAutor der Antwort Cristian Rojas
wenn Sie nur wollen, um zu überprüfen, ob der ein oder andere element vorhanden sind, können Sie diese benutzerdefinierte Helfer
wie diese
wenn Sie müssen auch in der Lage sein, um eine "oder" zu vergleichen
Funktion Werte zurückgeben
Eher würde ich hinzufügen, eine weitere Eigenschaft, gibt das gewünschte Ergebnis.
Die Vorlagen werden sollte logicless, nachdem alle!
InformationsquelleAutor der Antwort deepflame
Leider keine dieser Lösungen das problem zu lösen "ODER" Betreiber "cond1 || cond2".
Verwenden Sie "^" (oder) und prüfen, ob sonst cond2 wahr ist
{{#if cond1}}
TUN
{{^}}
{{#if cond2}}
TUN
{{/if}}
{{/if}}
Bricht es TROCKEN Regel. Warum also nicht auch teilweise um es weniger chaotisch
InformationsquelleAutor der Antwort Pawel
Für diejenigen, die das zu Problemen beim Vergleich von Objekteigenschaften, innerhalb der Helfer fügen Sie diese Lösung
Ember.js Helfer nicht richtig erkennen, ein parameter
InformationsquelleAutor der Antwort Manuel Cepeda
Gerade auf dieses Thema kam aus einer google-Suche auf, wie um zu überprüfen, ob ein string gleich einem anderen string.
Benutze ich HandlebarsJS in NodeJS server-Seite, aber ich benutze auch die gleiche Vorlage-Dateien auf dem front-end mit der browser-version von HandlebarsJS zu analysieren. Dies bedeutete, dass, wenn ich wollte einen eigenen Helfer, hätte ich es zu definieren ist in 2 separate Orte, oder eine Funktion zuweisen, um das Objekt in Frage - zu viel Mühe!!!!
Was die Leute vergessen ist, dass bestimmte Objekte Erben die Funktionen, die verwendet werden können, in die Schnurrbart-Vorlage. Im Falle einer Zeichenfolge:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
An Array containing the entire match result and any parentheses-captured matched results; null if there were no matches.
Wir können diese Methode verwenden, um wieder entweder ein array von übereinstimmungen oder
null
wenn keine übereinstimmungen gefunden wurden. Dies ist ideal, weil der Blick auf die HandlebarsJS Dokumentation http://handlebarsjs.com/builtin_helpers.htmlYou can use the if helper to conditionally render a block. If its argument returns false, undefined, null, "", 0, or [], Handlebars will not render the block.
So...
UPDATE:
Nach dem testen auf allen Browsern, das funktioniert nicht mit Firefox. HandlebarsJS geht, andere Argumente für einen Funktionsaufruf, so dass beim String.der Prototyp.match aufgerufen wird, wird das zweite argument (d.h. die Regexp-flags für die match-Funktion aufrufen, wie oben dargelegt Dokumentation) angezeigt wird, zu übergeben. Firefox sieht diese als veraltet Verwendung von String.der Prototyp.match, und so bricht.
Ein workaround ist es zu erklären, eine neue funktionale Prototyp für die String JS-Objektund verwenden Sie stattdessen:
Sicherzustellen, dass dieses JS-code enthalten ist vor führen Sie den LENKER.compile () - Funktion, die dann in Ihre Vorlage...
InformationsquelleAutor der Antwort Jon
Hier haben wir die vanilla-LENKER für mehrere logische && und || (oder):
Nicht so sicher, ob es "sicher" zu verwenden, "und" und "oder"... vielleicht ändern, um so etwas wie "op_and" und "op_or"?
InformationsquelleAutor der Antwort bob
Folgenden diese 2 guides ein-Weg-zu-lassen-Benutzer-definieren-custom-made-gebunden-if-Anweisungen und benutzerdefinierte gebunden Helfer ich war in der Lage, passen meine gemeinsame Ansichten in diesem Beitrag auf stackoverflow zu verwenden, anstatt die standard - #if-Anweisung. Dies sollte sicherer sein, als nur werfen eine #wenn dort.
Benutzerdefinierte gebunden Helfer in diesem Kern sind hervorragend.
Ich bin mit dem ember cli Projekt zu bauen mein ember Anwendung.
Aktuelle setup zu der Zeit von diesem post:
InformationsquelleAutor der Antwort Chris Hough
In Ember.js Sie können inline wenn Helfer im if-block Helfer. Es kann ersetzen Sie
||
logischer operator, zum Beispiel:InformationsquelleAutor der Antwort Daniel Kmak
Können Sie tun es einfach, indem Sie mit dem logischen operator wie dies unten gezeigt:
Bevor Sie schließen, wenn Sie können schreiben Sie Ihre business-Logik
InformationsquelleAutor der Antwort Kunwar Babu
Richtige Lösung für UND/ODER
Dann rufen Sie wie folgt
BTW: Beachten Sie, dass die Lösung, die hier gegeben ist falsch, er ist nicht subtrahieren Sie die Letzte argument ist der name der Funktion.
https://stackoverflow.com/a/31632215/1005607
Seiner ursprünglichen UND/ODER basierend auf der vollständigen Liste der Argumente
Kann das jemand ändern, dass diese Antwort? Ich habe gerade eine Stunde damit verschwendet, etwas zu reparieren, in einer Antwort empfohlen von 86 Menschen. Der fix ist filter aus dem letzten argument, das ist der name der Funktion.
Array.prototype.slice.call(arguments, 0, arguments.length - 1)
InformationsquelleAutor der Antwort gene b.
Weiteres krumm Lösung für eine ternäre Helfer:
Oder ein einfaches verschmelzen Helfer:
Da diese Zeichen keine Besondere Bedeutung im LENKER markup, du bist frei, Sie zu nutzen für die Helfer Namen.
InformationsquelleAutor der Antwort Mo Friedrich
Hier ist ein Ansatz, ich bin für ember 1.10 und ember-cli 2.0.
Dann können Sie es in Ihre Vorlagen wie diese:
Wo die Argumente, die dem Ausdruck übergeben werden, wie
p0
,p1
,p2
etc undp0
können auch referenziert werden, alsthis
.InformationsquelleAutor der Antwort Michael