# 在 Ember 中访问另一个模型--肯定有比 ajax 更好的方法

**URL:** https://meta.discourse.org/t/accessing-another-model-in-ember-surely-theres-a-better-way-than-ajax/216695
**Category:** Development
**Created:** [2022 年2 月 1 日 14:23 UTC](https://meta.discourse.org/t/accessing-another-model-in-ember-surely-theres-a-better-way-than-ajax/216695 "2022-02-01T14:23:03Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2022 年2 月 1 日 14:23 UTC](https://meta.discourse.org/t/accessing-another-model-in-ember-surely-theres-a-better-way-than-ajax/216695/1 "2022-02-01T14:23:03Z")

</div>

我正在标题中插入一个按钮，该按钮可将用户添加到组。这正在起作用，但进行 `ajax` 调用似乎不太对。似乎我可以“仅仅”调用 `Group` 模型并在那里完成，但我找不到可以执行此操作的示例。

这在插件中…

我想一定有办法将 `demoGroup` 变成一个模型而不是仅仅一个 `dict`？

```plaintext
      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")
          );
        });
      }

```

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [2022 年2 月 1 日 15:41 UTC](https://meta.discourse.org/t/accessing-another-model-in-ember-surely-theres-a-better-way-than-ajax/216695/2 "2022-02-01T15:41:57Z")

</div>

如果处理的对象是 `Group` 模型对象，则可以直接在其上调用 `addMembers`。如果不是，则可以使用 `Group.findAll` 方法。

有关用法，请查阅代码库。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2022 年2 月 1 日 19:49 UTC](https://meta.discourse.org/t/accessing-another-model-in-ember-surely-theres-a-better-way-than-ajax/216695/3 "2022-02-01T19:49:01Z")

</div>

Hmm. 仔细查看 `groups.js` 的功能，它似乎和我正在做的几乎是相同的 json 调用，更糟糕的是，我似乎需要用到的 `Group.findAll()` 来使用 `Group.addMembers` 会增加一个额外的 `ajax` 调用，而我目前正在避免它。也许我的代码不像我想的那么糟糕！

谢谢！
