Ich verstehe und begreife, dass ich diese Funktionen selbst erstellen muss, es ist nicht wie bei Jinja2 mit nützlichen integrierten Dingen dafür.
Aber wo erstelle ich diese Handlebars-Funktionen in meinem Plugin? Ich sehe hier eine ganze Menge Beispiele: Repository search results · GitHub
Aber ich sehe kein wirkliches Muster in dieser Ordnerstruktur. Ich habe meine eigene Funktion in discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js erstellt, aber wenn ich versuche, sie in discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs zu verwenden, erhalte ich den Fehler Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Das ist offensichtlich kein Pfad, nach dem Discourse sucht, oder ich mache etwas falsch.
import RawHandlebars from "discourse-common/lib/raw-handlebars";
import { htmlSafe } from "@ember/template";
import { rawConnectorsFor } from "discourse/lib/plugin-connectors";
//RawHandlebars.registerHelper("contains", function (args) {
// const connectors = rawConnectorsFor(args.hash.name);
// if (connectors.length) {
// const output = connectors.map((c) => c.template({ context: this }));
// return htmlSafe(output.join(""));
// }
//});
Handlebars.registerHelper('contains', function(needle, haystack, options) {
needle = Handlebars.escapeExpression(needle);
haystack = Handlebars.escapeExpression(haystack);
return (haystack.indexOf(needle) > -1) ? options.fn(this) : options.inverse(this);
});
Das folgende Thema legt nahe, dass es im Initializer-Verzeichnis liegen und die .es6-Erweiterung haben könnte.
Also habe ich meine contains.js in dieses Verzeichnis verschoben und .e6 als Erweiterung hinzugefügt und den gleichen Fehler erhalten. Etwas Hilfe oder Dokumentation wäre großartig ![]()