Magento 2:如何在订单摘要块加载/重载后执行自定义JavaScript
实现订单摘要块加载/重载时执行自定义JS的方案
不用直接重写get-totals.js,确实可以通过事件订阅或更优雅的扩展方式实现需求,以下是几种靠谱的方案:
1. 订阅Magento内置事件
Magento在订单摘要更新(包括初始加载和AJAX重载)时会触发特定事件,你可以直接监听这些事件来执行自定义逻辑:
- 监听总计更新事件:
$(document).on('checkout:updateTotals', function() { // 这里写你要执行的代码,比如更新自定义字段、调整样式等 console.log('订单摘要已更新'); });
- 如果是购物车页面的订单摘要,还可以监听
cart:update事件:
$(document).on('cart:update', function(event, data) { // data里包含更新相关的信息,可按需使用 console.log('购物车订单摘要已刷新'); });
2. 监听DOM变化(MutationObserver)
如果找不到合适的内置事件,用MutationObserver监听订单摘要容器的DOM变化,只要容器内的内容被加载或修改,就触发你的逻辑:
// 选择订单摘要的容器元素,替换成你实际的选择器 const summaryContainer = document.querySelector('.order-summary'); // 创建观察者实例 const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { // 仅当内容有新增/删除时执行逻辑(避免无意义触发) if (mutation.addedNodes.length || mutation.removedNodes.length) { console.log('订单摘要DOM已更新'); // 你的自定义代码 } }); }); // 配置观察选项 const config = { childList: true, subtree: true }; // 开始观察目标元素 observer.observe(summaryContainer, config);
3. 用Mixins扩展get-totals.js(推荐)
如果以上两种方案都不满足,也不用完全重写get-totals.js,可以用Magento的mixins机制扩展它的核心方法,在原逻辑执行前后插入你的代码:
- 创建自定义mixins文件(比如
app/code/YourVendor/YourModule/view/frontend/web/js/mixins/get-totals-mixin.js):
define([], function() { 'use strict'; return function(target) { return target.extend({ refresh: function() { // 先执行原方法的逻辑 this._super(); // 插入你的自定义代码 console.log('订单摘要已完成刷新'); } }); }; });
- 在
requirejs-config.js中注册mixins:
var config = { config: { mixins: { 'Magento_Checkout/js/view/summary/get-totals': { 'YourVendor_YourModule/js/mixins/get-totals-mixin': true } } } };
内容的提问来源于stack exchange,提问作者Shaun
相关产品推荐
相关产品推荐

