Accéder à un autre modèle dans Ember--il doit y avoir une meilleure façon que ajax

J’insère un bouton dans l’en-tête qui ajoute un utilisateur à un groupe. Cela fonctionne, mais faire un appel ajax pour ce faire ne semble pas correct. Il semblerait que je puisse “juste” appeler le modèle Group et le faire là-bas, mais je ne trouve aucun exemple qui le fasse.

Ceci est dans un plugin…

Je suppose qu’il doit y avoir un moyen de faire de demoGroup un modèle plutôt qu’un simple 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 « J'aime »

Si l’objet que vous traitez est un objet modèle Group, vous pouvez appeler directement addMembers dessus. Sinon, vous pouvez utiliser la méthode Group.findAll.

Pour l’utilisation, consultez la base de code.

1 « J'aime »

Hmm. En regardant de plus près ce que fait groups.js, il semble qu’il effectue à peu près le même appel json que moi, et pire encore, le Group.findAll() que je devrais apparemment faire pour pouvoir utiliser Group.addMembers ajoute un appel ajax supplémentaire que j’évite actuellement. Peut-être que mon code n’est pas aussi mauvais que je le pensais !

Merci !

1 « J'aime »