Acessando outro modelo no Ember — certamente há uma maneira melhor que ajax

Estou inserindo um botão no cabeçalho que adiciona um usuário a um grupo. Isso está funcionando, mas fazer uma chamada ajax para isso não parece certo. Pareceria que eu poderia “apenas” chamar o modelo Group e fazer isso lá, mas não consigo encontrar um exemplo que faça isso.

Isso está em um plugin…

Acho que deve haver alguma maneira de transformar demoGroup em um modelo em vez de apenas um 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("precisa adicionar ao 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: 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 curtida

Se o objeto com o qual você está lidando for um objeto de modelo Group, você pode chamar addMembers diretamente nele. Caso contrário, você pode usar o método Group.findAll.

Para uso, consulte a base de código.

1 curtida

Hmm. Olhando mais atentamente para o que groups.js faz, parece que ele está fazendo praticamente a mesma chamada json que eu, e pior, o Group.findAll() que parece que eu precisaria fazer para poder usar Group.addMembers adiciona uma chamada ajax extra que estou evitando no momento. Talvez meu código não seja tão ruim quanto eu pensava!

Obrigado!

1 curtida