在Magento2签出中覆盖js文件

时间:2019-04-10 12:51:01

标签: javascript magento2

我尝试在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主题,并且仅安装了示例数据和我的模块。

3 个答案:

答案 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

别忘了刷新缓存。