إعادة التوجيه إلى الصفحة بعد الشراء

لدي add_model_callback(DiscourseSubscriptions::Customer, :after_save) do ... في إضافة. معظم عمليات الشراء تؤدي إلى إنشاء “خادم” (نموذج مخصص). اليوم، تمكنت من معرفة كيفية جعل الأماكن الأخرى التي يتم فيها إنشاء خادم تنتقل إلى صفحة تكوين الخادم الجديد، مع شيء مثل

      Server.createServer(server).then((result) => {
        if (result.server) {
          this.get("servers").pushObject(EmberObject.create(result.server));
          const id = result.server.id;
          window.location = getURL(`/pfaffmanager/servers/${id}`);
        }

ما أود فعله الآن هو جعل Discourse يعيد التوجيه بشكل مماثل إلى تلك الصفحة الجديدة بعد إغلاق مربع حوار “شكرًا على الشراء”.
لا يهمني ما إذا كان سيحدث في Rails أو Ember، لكنني أعتقد أنه يجب أن يحدث في Ember؟ أنا لا أفهم تمامًا (أي، ليس لدي أي فكرة على الإطلاق) كيفية اختطاف توسيع وحدة التحكم/النموذج/أيًا كان في إضافة الاشتراكات من إضافتي.

إعجابَين (2)

هناك على الأرجح إجراء closeModal (ربما في المسار).

ضمن ذلك، يمكنك تنفيذ DiscourseURL.routeTo(\"/yourdiscourseroute\");

إعجاب واحد (1)

حسنًا، ليس تمامًا. ولكن، بشكل معجز، كان ذلك كافيًا! وجدت هذا:

ثم فعلت هذا!!

      api.modifyClass("controller:subscribe-show", {
        pluginId: "pfaffmanager",
        async _advanceSuccessfulTransaction(plan) {
          window.console.log("modifying subscription!!!", plan, this);
          this.alert("plans.success");
          this.set("loading", false);
          let servers = [];
          servers = await Server.listServers().then((result) => {
            if (currentUser && currentUser.servers !== undefined) {
              servers = currentUser.servers.sort((b, a) => {
                return ("" + a.updated_at).localeCompare(b.updated_at);
              });
              window.console.log("sorted servers", servers);
              if (servers.length > 0) {
                window.console.log(`going to first! ${servers[0].id}`);
                this.transitionToRoute(
                  "pfaffmanager.servers.show",
                  servers[0].id
                );
              } else {
                window.console.log(`server not found. going to index!`);
                this.transitionToRoute("pfaffmanager.servers.index");
              }
              // window.location = getURL(`/`);
              // window.location = getURL(`/pfaffmanager/servers/${id}`);
            }
          });
        },
      });

وهو قريب جدًا جدًا. المشكلة الآن هي أن هناك حالة سباق، حيث قد لا يكون add_model_callback(DiscourseSubscriptions::Customer, :after_save) do قد اكتمل قبل أن أقوم باستعلام ajax الخاص بي للحصول على الخوادم.

حسنًا، الأمر أغرب من ذلك. حتى لو أضفت تأخيرًا (باستخدام later) قبل إجراء استدعاء ajax للحصول على قائمة الخوادم الجديدة، فإنه لا يزال يحصل على قائمة قديمة، وليس القائمة بعد إضافة الخادم الجديد في رد الاتصال. يمكنني تحديث النافذة في علامة تبويب أخرى ورؤية أنها تحصل على البيانات الصحيحة قبل إجراء استدعاء ajax.

أعتقد أنني سأستسلم الآن. في حالة وجود الخادم قبل الشراء (وهو ما أعتقد أنه أكثر شيوعًا - ستقوم بتكوين كل شيء ثم تقول، “نعم، لنفعل ذلك”) فإنه يعمل؛ إنها فقط الحالة التي يقولون فيها “نعم، أريد الدفع مقابل تثبيت؛ سأدفع ثم أرى ما يحدث.”