Zugriff auf ein anderes Modell in Ember – es muss doch einen besseren Weg als Ajax geben

Ich füge einen Button in den Header ein, der einen Benutzer zu einer Gruppe hinzufügt. Das funktioniert, aber einen ajax-Aufruf dafür zu machen, scheint einfach nicht richtig zu sein. Es scheint, als könnte ich einfach irgendwie das Group-Modell aufrufen und es dort tun, aber ich kann kein Beispiel finden, das das tut.

Das ist in einem Plugin…

Ich schätze, es muss irgendeine Möglichkeit geben, wie ich demoGroup zu einem Modell und nicht nur zu einem dict machen kann?

      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 „Gefällt mir“

Wenn das Objekt, mit dem Sie arbeiten, ein Group-Modellobjekt ist, können Sie addMembers direkt darauf aufrufen. Wenn nicht, können Sie die Methode Group.findAll verwenden.

Für die Verwendung schauen Sie in den Code.

1 „Gefällt mir“

Hmm. Wenn ich mir genauer ansehe, was groups.js tut, scheint es ziemlich denselben JSON-Aufruf zu machen wie ich, und schlimmer noch, das Group.findAll(), das ich anscheinend tun müsste, um Group.addMembers verwenden zu können, fügt einen zusätzlichen ajax-Aufruf hinzu, den ich derzeit vermeide. Vielleicht ist mein Code doch nicht so schlecht, wie ich dachte!

Danke!

1 „Gefällt mir“