我尝试在magento2结帐中覆盖js文件。
我要覆盖/vendor/magento/module-checkout/view/frontend/web/js/view/form/element/email.js
。
因此我将文件复制到模块中:
/app/code/Myself/Test/view/frontend/web/js/view/form/element/email.js
我在/app/code/Myself/Test/view/frontend/web/js/view/form/element/email.js
中做了一个小改动:
/**
* Callback on changing email property
*/
emailHasChanged: function () {
var self = this;
clearTimeout(this.emailCheckTimeout);
if (self.validateEmail()) {
quote.guestEmail = self.email();
checkoutData.setValidatedEmailValue(self.email());
$.cookie("checkoutemail", self.email()); // <--- this is the change
}
this.emailCheckTimeout = setTimeout(function () {
if (self.validateEmail()) {
self.checkEmailAvailability();
} else {
self.isPasswordVisible(false);
}
}, self.checkDelay);
checkoutData.setInputFieldEmailValue(self.email());
},
文件的其他部分不变。
然后我创建了/app/code/Myself/Test/view/frontend/requirejs-config.js
:
var config = {
map: {
'*':
{
'Magento_Checkout/js/view/form/element/email.js':'Myself_Test/js/view/form/element/email.js'
}
}
};
在此requirejs-config.js
中,我不确定路径从哪里开始。
所以我也这样尝试:
'Magento_Checkout/web/js/view/form/element/email.js':'Myself_Test/web/js/view/form/element/email.js'
。
但是覆盖无效。原始的email.js已加载到结帐中。
更改后我确实运行了setup:upgrade
命令,并且Magento2 Shop处于开发人员模式,使用Luma主题,并且仅安装了示例数据和我的模块。
答案 0 :(得分:1)
我看到您正在将文件扩展名添加到路径。删除它,它应该可以工作。
var config = {
map: {
'*': {
'Magento_Checkout/js/view/form/element/email': 'Myself_Test/js/view/form/element/email'
}
}
};
这是问题的答案。下面是替代解决方案。
您可以扩展它,而仅更改其中的一部分,而不是覆盖整个文件。这样一来,如果您要更新Magento 2,并且在其他一些方法上会有变化,那么您修改的方法就不需要更新自定义文件。
如何扩展javascript文件?在这种情况下,uiComponent
https://devdocs.magento.com/guides/v2.4/javascript-dev-guide/javascript/js_mixins.html#examples
答案 1 :(得分:0)
从
更改路径/app/code/Myself/Test/web/js/view/form/element/email.js
到
/app/code/Myself/Test/view/frontend/web/js/view/form/element/email.js
然后清除缓存运行内容部署,然后重试。 `
答案 2 :(得分:0)
问题出在您用来进行覆盖的路径中。
将文件位置更改为下面给出的路径,它将对您有用。
/app/code/Magento/Checkout/view/frontend/web/js/view/form/element/email.js
别忘了刷新缓存。