コンポーネントからAPIにアクセスする

私はDiscourseのテーマを試していますが、Web/Javascript開発者ではありません。サードパーティのテーマコンポーネントを見ていると、この質問が出てきました。

discourse-header-submenus/javascripts/discourse/connectors/above-site-header/header-submenus.jsを見ると、このコードがあります。

export default {
  setupComponent() {
    // ここにコードがあります
  },
};

ファイルの先頭にインポートはありません。

もし私が(厳格な)JavaScriptを正しく理解していれば、setupComponent()内のコードがアクセスできる唯一のコンテキストは、それが評価されているオブジェクトの属性になります。

setupComponent()関数内でconsole.log(this)を使用してこのコンテキストを見ると、非常に便利なapiオブジェクトにアクセスできないようです。

それは残念です!

また、公式のAPI関数を使用するためのラッパーコードはバージョン管理されており、次のようになっているため、どのように正しくimportすればよいかわかりません。

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("0.12.3", api => {
    // ここでapiを使用するコード
});

setComponent()内からapiオブジェクトにアクセスするにはどうすればよいですか?それとも、何か根本的なことを見落としていますか?

「いいね!」 1

承知いたしました。このように行います。

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
    setupComponent() {
        withPluginApi("0.12.3", api => {
            console.log(api.getCurrentUser());
        });
    },
};
「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.