如何为已经存在的
mixin
构建mixin
?有可能吗?
我需要重写
Vendor_Module:js/checkout-mixin
中的一个函数,该函数已经是 mixin
的
Magento_Checkout:js/something
我尝试在
requirejs-config.js
中设置它,就像我通常定义 mixin 所做的那样,但它不起作用。
直接为
mixin
设置新的 Magento_Checkout:js/something
不是一个选项。
谢谢
抱歉,但是如果您想第二次混合已经混合的文件,这是可能的。
这里是 magento 本身提供的 breadcrumbs js 的最佳示例
只需将此代码放入您的 requirejs-config.js 中
var config = {
config: {
mixins: {
'Magento_Catalog/js/product/breadcrumbs': {
'Vendor_ModuleName/js/breadcrumbs-mixin': true
}
}
}
};
并将此代码放入您自己的 js 目录中的vendor_company模块中
define([
'jquery',
'Magento_Catalog/js/product/breadcrumbs',
'jquery/ui'
], function ($) {
'use strict';
return function (widget) {
$.widget('mage.breadcrumbs', widget, {
/**
* {@inheritdoc}
*/
_getCategoryCrumb: function (menuItem) {
//do some custom stuff
return this._super(menuItem);
},
});
return $.mage.breadcrumbs;
};
});
你可以把你的其他方法像
_getCategoryCrumb: function (menuItem) {
//do some custom stuff
return this._super(menuItem);
},
也许我做错了什么,但 Suraj 的解决方案对我不起作用。因此,建议 jQuery 小部件的替代解决方案(我希望类似的方法也适用于组件)
首先用自己的替换现有的mixin
var config = {
config: {
mixins: {
'Magento_Theme/js/view/breadcrumbs': {
'Magento_Catalog/js/product/breadcrumbs': false, // Turn off original mixin
'Vendor_Module/js/product/breadcrumbs-mixin': true, // Use own mixin
}
}
}
};
第二个基于替换的 mixin 中的小部件创建自己的小部件
define([
'jquery',
'Magento_Theme/js/model/breadcrumb-list',
'Magento_Catalog/js/product/breadcrumbs',
], function(
$,
breadcrumbList,
mageBreadcrumbsWidget,
) {
'use strict';
return function(breadcrumbs) {
let mageBreadcrumbs = mageBreadcrumbsWidget(breadcrumbs);
return $.widget('my.breadcrumbs', mageBreadcrumbs, {
// Custom implementation
})
}
})