Emberで別のモデルにアクセスする--ajaxよりも良い方法があるはず

ヘッダーにユーザーをグループに追加するボタンを挿入しています。これは機能していますが、ajax呼び出しを行うのは正しくないようです。Groupモデルを呼び出してそこで処理できると思いますが、その例が見つかりません。

これはプラグイン内です。

demoGroupを単なるdictではなくモデルとして扱う方法があるはずだと思いますか?

      const demoServerGroupName = siteSettings.pfaffmanager_demo_server_group;
      const groups = Site.currentProp("groups");
      const router = container.lookup("router:main");

      const demoGroup = groups.find((g) => {
        return g.name === demoServerGroupName;
      });
      const hasDemoServer = servers.find((g) => {
        return g.hostname.includes("pfaffmanagerdemo");
      });
      if (demoGroup && !hasDemoServer) {
        api.decorateWidget("header-buttons:before", (helper) => {
          const addToDemoGroup = function () {
            window.console.log("need to add to group", demoGroup);

            const groupId = demoGroup.id;
            const url = `/groups/${groupId}/join.json`;
            ajax(url, {
              type: "PUT",
              data: currentUser.username,
            })
              .then(() => {
                router.transitionTo("/pfaffmanager/servers"); //TODO: refer to the route?
              })
              .catch(popupAjaxError);
          };

          return helper.h(
            "button#newDemoServer",
            {
              className: "btn btn-text btn-primary create headerLink",
              title: I18n.t("pfaffmanager.server.create_demo_server_title"),
              onclick: addToDemoGroup,
            },
            I18n.t("pfaffmanager.server.create_demo_server_short")
          );
        });
      }
「いいね!」 1

扱っているオブジェクトが Group モデルオブジェクトの場合、それに直接 addMembers を呼び出すことができます。そうでない場合は、Group.findAll メソッドを使用できます。

使用方法については、コードベースを参照してください。

「いいね!」 1

Hmm. groups.js の動作を詳しく見ると、私がしているのと同じような JSON 呼び出しを行っており、さらに悪いことに、Group.addMembers を使用するために必要と思われる Group.findAll() は、現在回避している追加の ajax 呼び出しを追加します。もしかしたら、私のコードは思ったほど悪くないのかもしれません!

ありがとうございます!

「いいね!」 1