Entendo e aceito que preciso criar essas funções, não é como o Jinja2 com coisas úteis integradas para fazer isso.
Mas onde devo criar essas funções do handlebars no meu plugin? Vejo vários exemplos aqui: Repository search results · GitHub
Mas não vejo realmente um padrão nesta estrutura de pastas. Criei minha própria função em discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js, mas quando tento usá-la em discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs recebo o erro Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Então, obviamente, este não é um caminho onde o Discourse está procurando, ou estou fazendo algo errado.
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);
});
O tópico abaixo sugere que pode estar no diretório de inicializadores e ter a extensão es6.
Então movi meu contains.js para esse diretório e adicionei .e6 como extensão e recebi o mesmo erro. Alguma ajuda ou documentação seria ótima ![]()