555 Stimmen

Logischer Operator in einer Handlebars.js {{#if}} Bedingung

Gibt es eine Möglichkeit, in Handlebars JS logische Operatoren in den Standard-Handlebars.js-Bedingungsoperator einzubinden? Etwas wie das:

{{#if section1 || section2}}
.. Inhalt
{{/if}}

Ich weiß, ich könnte meinen eigenen Helfer schreiben, aber ich möchte zuerst sicherstellen, dass ich nicht das Rad neu erfinde.

1 Stimmen

Für die "und" Logik können Sie verschachtelte if-Bedingungen verwenden, aber es ist umständlich und hilft Ihnen nicht beim "sonst", oder bei einer "oder" Logik wie in Ihrer obigen Frage.

2voto

gene b. Punkte 8466

Korrekte Lösung für UND/ODER

Handlebars.registerHelper('and', function () {
    // Funktionargumente abrufen und den letzten (Funktionsnamen) entfernen
    return Array.prototype.slice.call(arguments, 0, arguments.length - 1).every(Boolean);
});
Handlebars.registerHelper('or', function () {
    // Funktionargumente abrufen und den letzten (Funktionsnamen) entfernen
    return Array.prototype.slice.call(arguments, 0, arguments.length - 1).some(Boolean);
}); 

Dann wie folgt aufrufen

{{#if (or (eq questionType 'STARTTIME') (eq questionType 'ENDTIME') (..) ) }}

Übrigens: Beachten Sie, dass die hier gegebene Lösung inkorrekt ist, da der letzte Argument, welcher der Funktionsname ist, nicht abgezogen wird. https://stackoverflow.com/a/31632215/1005607

Sein originaler UND/ODER basierte auf der vollständigen Liste der Argumente

   and: function () {
        return Array.prototype.slice.call(arguments).every(Boolean);
    },
    or: function () {
        return Array.prototype.slice.call(arguments).some(Boolean);
    }

Kann jemand diese Antwort ändern? Ich habe gerade eine Stunde damit verbracht, etwas in einer von 86 Personen empfohlenen Antwort zu beheben. Die Korrektur besteht darin, den letzten Argument, welcher der Funktionsname ist, auszufiltern. Array.prototype.slice.call(arguments, 0, arguments.length - 1)

2voto

Cristian Rojas Punkte 2536

Ich habe ein npm-Paket gefunden, das mit CoffeeScript erstellt wurde und viele unglaublich nützliche Helfer für Handlebars enthält. Werfen Sie einen Blick auf die Dokumentation unter folgender URL:

https://npmjs.org/package/handlebars-helpers

Sie können ein wget http://registry.npmjs.org/handlebars-helpers/-/handlebars-helpers-0.2.6.tgz ausführen, um sie herunterzuladen und den Inhalt des Pakets zu sehen.

Sie werden in der Lage sein, Dinge wie {{#is number 5}} oder {{formatDate date "%m/%d/%Y"}} zu tun.

1 Stimmen

Danke @Cristian! Das ist eine gute Lösung!

2voto

Sie können den folgenden Code verwenden:

{{#if selection1}}
    doSomething1
{{else}}
   {{#if selection2}}
       doSomething2
   {{/if}}
{{/if}}

1 Stimmen

Bitte erkläre mehr über deine Gedanken und deinen Prozess. Es kann für Menschen sehr schwierig sein, deine Lösung zu verstehen, wenn sie den Zusammenhang nicht kennen oder neu in der Sprache sind.

1voto

Manuel Cepeda Punkte 11

Für diejenigen, die Probleme haben, Objekteigenschaften zu vergleichen, fügen Sie diese Lösung innerhalb des Helpers hinzu

Ember.js-Helfer erkennt einen Parameter nicht ordnungsgemäß

1voto

bob Punkte 6781

Hier haben wir Vanille-Handgriffe für mehrere logische && und || (und oder):

Handlebars.registerHelper("and",function() {
    var args = Array.prototype.slice.call(arguments);
    var options = args[args.length-1];

    for(var i=0; i

`

Nicht sicher, ob es "sicher" ist, "and" und "or" zu verwenden... vielleicht ändern Sie es in etwas wie "op_and" und "op_or"?

`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X