Discourse.SiteSettings لا يعمل بعد الترقية

باتباع النصائح هنا الانتقال بعيدًا عن Discourse.SiteSettings: دليل الترقية:

عندما أفعل ذلك، أحصل على: TypeError: undefined is not an object (evaluating 'settings.tag_style')

هذا في مكون أنشأته بنص برمجي في الرأس (لا تعمل أي من الخيارات الأخرى التي ذكرها روبن أيضًا).

هل هناك أي شيء آخر يمكنني تجربته؟ هل يجب أن أستمر في استخدام Discourse.SiteSettings؟

هل يمكنك مشاركة الكود الخاص بك، بما في ذلك علامة HTML النصية؟

إليك يا روبن:

<script type="text/discourse-plugin" version="0.1">
  const getURL = require('discourse-common/lib/get-url').default;

  function customLinkTagRenderer(tag, params) {
    params = params || {};
    const visibleName = Handlebars.Utils.escapeExpression(tag);
    tag = visibleName.toLowerCase();
    const classes = ["discourse-tag"];
    const tagName = params.tagName || "a";
    let path;
    if (tagName === "a" && !params.noHref) {
      if (params.isPrivateMessage && Discourse.User.current()) {
        const username = params.tagsForUser
          ? params.tagsForUser
          : Discourse.User.current().username;
        path = `/u/${username}/messages/tags/${tag}`;
      } else {
        path = `https://site.com/${tag}`;
      }
    }
    const href = path ? ` href='${getURL(path)}' ` : "";

    if (Discourse.SiteSettings.tag_style || params.style) {
      classes.push(params.style || Discourse.SiteSettings.tag_style);
    }

	  let val =
	    "<" +
	    tagName +
	    href +
	    " data-tag-name=" +
	    tag +
	    " class='" +
	    classes.join(" ") +
	    "'>" +
	    visibleName +
	    "</" +
	    tagName +
	    ">";

    if (params.count) {
      val += " <span class='discourse-tag-count'>x" + params.count + "</span>";
    }

    return val;
  }

  api.replaceTagRenderer(customLinkTagRenderer);
</script>

كل ما يفعله هو تغيير هذا السطر:

path = `https://site.com/${tag}`;

(لا تعمل Handlebars.Utils.escapeExpression(tag); أيضًا)

أها، فهمت. تشير settings في هذه الحالة إلى إعدادات السمة، وهي أكثر شيوعًا للسمات/الإضافات.\n\nلقد قمت بتحديث التوثيق حول كيفية الوصول إلى إعدادات الموقع. يمكنك القيام بذلك بهذه الطريقة:\n\njs\n\u003cscript type=\"text/discourse-plugin\" version=\"0.1\"\u003e\n let siteSettings = api.container.lookup('site-settings:main');\n\u003c/script\u003e\n

شكرا روبن - إنه يعمل :smiley:

أي أفكار حول كيفية إصلاح Handlebars.Utils.escapeExpression؟

يجب أن تكون قادرًا على استيراد المساعد الخاص بنا:

const { escapeExpression } = require('discourse/lib/utilities');