如何通过mixin将新的JS功能添加到Magento结帐付款页面的运输信息部分?



我正试图在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
}
}
}

最新更新