Accediendo a otro modelo en Ember--seguramente hay una mejor manera que ajax

Estoy insertando un botón en la cabecera que añade un usuario a un grupo. Esto funciona, pero hacer una llamada ajax para hacerlo no parece correcto. Parecería que podría “simplemente” llamar al modelo Group y hacerlo allí, pero no encuentro un ejemplo que lo haga.

Esto está en un plugin…

Supongo que debe haber alguna manera de convertir demoGroup en un modelo en lugar de solo un 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("necesito añadir al grupo", demoGroup);

            const groupId = demoGroup.id;
            const url = `/groups/${groupId}/join.json`;
            ajax(url, {
              type: "PUT",
              data: currentUser.username,
            })
              .then(() => {
                router.transitionTo("/pfaffmanager/servers"); //TODO: ¿referirse a la ruta?
              })
              .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 me gusta

Si el objeto con el que está trabajando es un objeto de modelo Group, puede llamar directamente a addMembers en él. Si no, puede usar el método Group.findAll.

Para su uso, consulte la base de código.

1 me gusta

Hmm. Mirando más de cerca lo que hace groups.js, parece que está haciendo prácticamente la misma llamada json que yo, y peor aún, el Group.findAll() que parece que necesitaría hacer para poder usar Group.addMembers añade una llamada ajax adicional que actualmente estoy evitando. ¡Quizás mi código no es tan malo como pensaba!

¡Gracias!

1 me gusta