在 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("需要添加到组", demoGroup);

            const groupId = demoGroup.id;
            const url = `/groups/${groupId}/join.json`;
            ajax(url, {
              type: "PUT",
              data: currentUser.username,
            })
              .then(() => {
                router.transitionTo("/pfaffmanager/servers"); //TODO: 引用路由?
              })
              .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.findAll() 来使用 Group.addMembers 会增加一个额外的 ajax 调用,而我目前正在避免它。也许我的代码不像我想的那么糟糕!

谢谢!

1 个赞