我正试图在Magento 2中为结账/付款页面的发货信息部分添加一个mixin。
vendor/magento/module-checkout/view/frontend/web/template/shipping-information/address-renderer/default.html
中有一个现有部分如下:
<each args="data: address().customAttributes, as: 'element'">
<text args="$parent.getCustomAttributeLabel(element)"/>
<br/>
</each>
我想创建一个myNewFunction((并从这里调用它。因此,我临时添加了if="$parent.myNewFunction(element)"
,如下所示:
<each args="data: address().customAttributes, as: 'element'">
<text if="$parent.myNewFunction(element)" args="$parent.getCustomAttributeLabel(element)"/>
<br/>
</each>
预先存在的函数CCD_ 3在CCD_。
这就是我需要在添加myNewFunction()
的地方。我不想覆盖整个文件并将其复制到我的主题中,所以我试图通过mixin将函数添加到其中。
为了做到这一点,我去掉了一个模块:app/code/MyCompany
。
在这个模块中,我创建了:
app/code/MyCompany/Checkout/view/frontend/requirejs-config.js
使用此代码:
var config = {
config: {
mixins: {
'Magento_Checkout/js/view/shipping-information/address-renderer/default': {
'MyCompany_Checkout/js/view/shipping-information/address-renderer/default-mixin': true
}
}
}
};
然后我在中创建了mixin
app/code/MyCompany/Checkout/view/frontend/web/js/view/shipping-information/address-renderer/default-mixin.js
使用此代码:
define([
'uiComponent',
'underscore',
'Magento_Customer/js/customer-data'
], function (Component, _, customerData) {
'use strict';
return function (target) {
return target.extend({
myNewFunction: function (element) {
console.log(element);
return false;
}
});
}
});
我当前已将部署模式设置为";开发";在马根托。尽管如此,我还是尝试删除了所有的var/*文件,再次生成静态内容,并清除了缓存。
不管怎样,在加载结账/付款页面时,我在控制台中不断收到这个JS错误:
$parent.myNewFunction is not a function
我在这里做错了什么?
我怀疑模块需要一个register.php?或者模块未加载?然而,我看到了很多其他的例子,比如这个指南,这个Magento mixin-stackkoverflow问题,以及这个关于如何通过mixin添加shipping.js功能的例子,除了声明requirejs-config.js
和mixinJS文件本身之外,没有一个提到对模块做更多的事情。
刚刚找到了一种使用"mixins"覆盖该函数的方法。在requirejs-config.js文件上,我不得不添加:
config: {
mixins: {
'Magento_Checkout/js/view/shipping': {
'Mynamespace_Mymodule/js/view/shipping': true
}
}
}