Magento 2: Как обнаружить изменение шага оформления заказа

9

Я пытаюсь выяснить лучший метод обнаружения изменения шага в кассе Magento 2. Например, переходя от деталей доставки к оплате или наоборот.

Я немного покопался, и vendor/magento/module-checkout/view/frontend/web/js/model/step-navigator.jsя могу использовать, next()который срабатывает при нажатии кнопки «Продолжить», и navigateTo()который срабатывает, когда пользователь нажимает на шаг проверки - но оба метода кажутся довольно хакерскими, должен быть более чистый способ обнаружения изменения шага независимо от того, как и какой шаг .

Я надеялся на stepChange()функцию или что-то подобное, которое срабатывает всякий раз, когда происходит изменение шага оформления заказа.

Мой вопрос:

Каков наилучший способ вызвать мой пользовательский JS при изменении шага оформления заказа?

Бен Крук
источник

Ответы:

12

Вы можете зарегистрировать ручку, когда изменяется хэш - код, то есть $(window).hashchange(callBack).

Вот что происходит в Magento_Checkout/view/frontend/web/js/view/progress-bar.js:

$(window).hashchange(_.bind(stepNavigator.handleHash, stepNavigator));

Это заставляет stepNavigator.handleHashфункцию выполняться всякий раз, когда изменяется шаг, потому что изменение шагов использует nextили navigateToменяет хеш окна.

Аарон Аллен
источник
Спасибо Аарон, извинения, я не дал полную награду, я не знал, что был крайний срок для этого.
Бен Крук
0

Хороший вопрос. Я не знаю, как лучше (мне интересны другие ответы), но я думаю, что добавление пользовательского события в функцию .next()или .isProcessed()и передачу ей текущего шага может быть довольно хорошим решением.

nuovecode
источник
1
Я не думаю, что добавление его к следующему является хорошей идеей, так как тогда оно не сработает, если вы вернетесь на шаг назад
Бен Крук