إذًا، أفهم وأدرك أن عليّ إنشاء هذه الدوال بنفسي، فهي ليست مثل Jinja2 التي تحتوي على أشياء مدمجة مفيدة للقيام بذلك.
ولكن أين أقوم بإنشاء دوال handlebars هذه في المكون الإضافي الخاص بي؟ أرى العديد من الأمثلة هنا: Repository search results · GitHub
ولكنني لا أرى حقًا نمطًا في بنية المجلد هذه. لقد أنشأت دالتي الخاصة في discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js، ولكن عندما أحاول استخدامها في discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs، أحصل على الخطأ Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. لذا من الواضح أن هذا ليس مسارًا يبحث فيه Discourse، أو أنني أفعل شيئًا خاطئًا.
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);
});
يقترح الموضوع أدناه أنه يمكن أن يكون في دليل initializers وأن يكون له امتداد es6.
لذا نقلت ملف contains.js الخاص بي إلى هذا الدليل وأضفت .e6 كملحق وحصلت على نفس الخطأ. بعض المساعدة أو المستندات ستكون رائعة ![]()