Ember.js: تنظيف عناوين URL حريصة بعد الإحباط

تم إنشاؤها على ٢٢ يوليو ٢٠١٤  ·  28تعليقات  ·  مصدر: emberjs/ember.js

تكون تحديثات عنوان URL الحماسة لطيفة عندما يتمكن كل شيء من الإحباط أو الانتقال في نفس حلقة التشغيل. ولكن يمكن أن تحدث عمليات الإحباط والانتقالات في حلقات التشغيل اللاحقة ، وفي هذه الحالة نترك التطبيق في حالة معطلة.

في حالة الإحباط ، ينتهي بك الأمر بعنوان URL لا يعكس حالتك الحالية الحقيقية. في المرة التالية التي يضغط فيها المستخدم على زر الرجوع ، لا يحدث شيء.

في حالة إعادة التوجيه ، يمكنك كسر زر الرجوع من خلال ترك حالة وسيطة في سجل المستخدم ، والتي غالبًا ما تعيد توجيههم مرة أخرى.

لقد ناقشت هذا الأمر مع machty واتفقنا على أنه سيكون من الجيد العمل على ذلك. على الأرجح يمكن لجهاز التوجيه تتبع دفعات URL الحثيثة وإفراغها بـ history.back() أو ما شابه ذلك عند حدوث الإجهاض.

Bug Inactive Needs Submitter Response

التعليق الأكثر فائدة

تم إصلاح ذلك من خلال https://github.com/tildeio/router.js/pull/197 (في 2.10.0-beta.3 +).

عرض توضيحي مقابل الإصدار 2.10.0-beta.3: http://emberjs.jsbin.com/yeqisuh/1

ال 28 كومينتر

أنا أتفق مع هذه القضية. أراه الآن ، حتى إذا قمت بإجراء transition.abort() في خطاف willTransition للمسار. يعكس عنوان URL الصفحة التي كانت ستنتقل إليها إذا لم يتم إحباط النقل.

: +1:

@ ef4 أحب أن تأخذ طعنة في هذا إذا كان لديك ميل ؛ lemme تعرف اهتمامك / توافر

يمكنني العمل على هذا ، ولكن ربما ليس على الفور.

: +1: تم تشغيله في هذا عند اتباع نموذج الرمز willTransition في مستندات API. تم تغيير عنوان URL على الرغم من استدعاء abort .

لدي نفس المشكلة. قمت بإنشاء jsbin لإعادة إنشائه للفضوليين: http://emberjs.jsbin.com/tijebi/1

@ ef4 ما زلت تخطط للنظر في هذا؟

عذرًا ، إنها منخفضة في قائمة أولوياتي مؤخرًا.

للتسجيل ، لقد واجهت للتو نفس المشكلة

نتخلص من عناوين URL المتلهفة ، ونغلق لصالحنا إذا كان # 9919

فقط في حالة استمرار وجود شخص ما بهذه المشكلة ويحتاج إلى حل _ الآن_:

// app/routes/your-route.js

export default Ember.Route.extend({
    // ...
    actions: {
        willTransition(transition) {
            var model = this.controller.get('model');
            if (
                model.get('hasDirtyAttributes') && 
                !confirm("You're going to discard all unsaved changes. Are you sure?")
            ) {
                transition.abort();

                // Custom revert of Back button result
                var oldURL = this.router.generate(this.routeName, model);
                var newURL = this.router.location.getURL();
                if (oldURL != newURL) {
                    this.router.location.setURL(oldURL);
                }
            } else {
                return true;
            }
        }
    }
});

لا أرغب في استخدام طرق this.router.location مباشرةً ، لكنها مثل الطريقة الوحيدة للقيام بذلك الآن (للتعامل مع _ جميع أنواع المواقع_)

لقد قمت للتو بتحديث jsbin الخاص بي من العام الماضي إلى 1.13.4 وما زالت هذه المشكلة موجودة: http://emberjs.jsbin.com/lohekasuhu/edit؟html ، css، js

يمكنني أن أؤكد أن هذا لا يزال يمثل مشكلة مع 1.13.11 أيضًا.

يؤدي استدعاء abort() عند الانتقال في afterModel إلى تحديث عنوان URL ودخول التطبيق في حالة معطلة.

فشلت مكالمات transitionToRoute اللاحقة في تحديث المسار بشكل صحيح ، ولم يعد الحل أعلاه يعمل لأن router.location لا يحتوي على طرق getURL و setURL .

لقد قمت بتحديثbcardarella الصورة [jsbin إلى 2.5.0]. ما زال يحدث.

تم إصلاح ذلك من خلال https://github.com/tildeio/router.js/pull/197 (في 2.10.0-beta.3 +).

عرض توضيحي مقابل الإصدار 2.10.0-beta.3: http://emberjs.jsbin.com/yeqisuh/1

rwjblue لست متأكدًا من إصلاح هذا في حالة transition#abort ؟

@ kanderek نعم ، لقد صادفت هذا السلوك للتو. أنا على 2.11.3 رغم ذلك.

مرحبا،
مع 2.14 سبتمبر ، لا تزال المشكلة قائمة

تواجه هذه المشكلة مع 2.11.3

تستخدم حاليًا هذا الحل البديل القبيح الذي وجدته في stackoverflow

//right after an aborted transition
if (window.history) {
  window.history.forward();
}

من فضلك لا تخجلني على ذلك ^

+1

ما زلت أرى هذه المشكلة! أنا على 2.12.2

هل يمكن لشخص أن يقدم مثالا فاشلا لهذا؟

wagenet هنا مثال باستخدام Ember 3.1.1:
https://github.com/btecu/ember-issues/tree/5210

SirZachadamreisnzbcardarellabschouwerwoubtecucibernoxdkorenblyum @ EF4kanderekkanongilkottenatormachtymutewinterpixelhandler @ رافائيل-بايفاrwjbluestefanpennerwagenetwoprandi هذا لا تزال قضية، ربما ينبغي لنا قريبا أو إنشاء نسخة جديدة من هذا ، ما رأيك؟

btecu هل يمكنك تحديث المثال الخاص بك إلى Ember 3.5؟

+1 يجري الآن هذا أيضًا (على ما أعتقد). في حالتنا ، ننتقل إلى صفحة ، ثم نعود باستخدام window.history.go (-1) - يبدو أنه يستمر فقط في تحميل الصفحة الحالية (إكمال الانتقال وما إلى ذلك وتحميل بقية المحتوى غير المتزامن) والذي يستغرق بعض الوقت ، ثم في النهاية يجعل الانتقال مرة أخرى. يتم تحديث عنوان url على الفور بالرغم من ذلك. ربما لأننا نستخدم واجهة برمجة التطبيقات التاريخ مباشرة؟

جربت هذا للتو مع 3.9.1

ومشوشا هذه المشكلة بسبب الخلل الأصلي بالتأكيد لم تحصل ثابتة. لم نعد نجري تحديثات URL حريصة بعد الآن. سأختتم هنا لأن هناك الكثير من التاريخ غير ذي الصلة هنا.

miguelcobain إذا كان بإمكانك مشاركة النسخ الخاصة بك على 3.9.1 كمسألة جديدة ، فهذا سيساعدها في الحصول على الاهتمام المناسب.

كانت هذه هي أفضل نتيجة عندما بحثت عن هذه المشكلة التي لا تزال تبدو وكأنها شيء ما ، لذلك اعتقدت أنني ألصق مقتطفًا محدثًا مع حل بديل لأي شخص يتعثر عبر هذا (يرجى إعلامي إذا كان هناك حل فعلي لست على علم):

  <strong i="6">@service</strong> router

  <strong i="7">@action</strong> 
  willTransition(transition) {
    if (!transition.to.find(route => route.name === this.routeName) && !confirm('confirm?')) {
      transition.abort()
      let oldURL = this.router.currentURL;
      let newURL = this.router.location.getURL();
      if (oldURL != newURL) {
          this.router.location.setURL(oldURL);
      }
    }
    return true;
  }

هذه نسخة مبسطة من اقتراح kottenator الذي قدمه أعلاه (https://github.com/emberjs/ember.js/issues/5210#issuecomment-122033542).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات