Entiendo y acepto que tengo que crear estas funciones yo mismo, no es como Jinja2 con cosas útiles integradas para hacer esto.
Pero, ¿dónde creo estas funciones de handlebars en mi plugin? Veo bastantes ejemplos aquí: Repository search results · GitHub
Pero realmente no veo un patrón en la estructura de esta carpeta. He creado mi propia función en discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js, pero cuando intento usarla en discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs obtengo el error Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Así que, obviamente, esta no es una ruta donde Discourse esté buscando, o estoy haciendo algo mal.
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);
});
El tema a continuación sugiere que podría estar en el directorio de inicializadores y tener la extensión es6.
Así que moví mi contains.js a ese directorio y agregué .e6 como extensión y obtuve el mismo error. Alguna ayuda o documentación sería genial ![]()