Часто потрібно змінити логіку JavaScript коду, який знаходиться у .js файлі. Найпростіший спосіб - переписати js-файл, за допомогою теми. Як переписувати файли view описано у нашому блозі. Це швидкий, але не елегантний спосіб.

Для зміни одного чи декількох методів js-файлу, використовуйте змішувачі (Mixins), які доступні у RequireJS.

Щоб розширити файл:

app/code/VendorName/ModuleName/view/%area%/web/js/folder1/folder2/somefile.js

із кодом:

define(
[
     'jquery',
        'underscore',
        'ko',
         'uiComponent',
         'uiRegistry',
],
    function (
        $,
        _,
        ko,
        Component,
        registry,
    ) {
'use strict';
        return Component.extend({
// ...
            method1: function() { /* some code */ },
            method2: function() { /* some code */ }
             // ...
        }); }
);

%area% - область, де відбувається розширення, наприклад: frontend, adminhtml, base.

 

Для переписування method1 цього js-файлу, необхідний мінімальний (базовий) модуль Magento 2, у який додайте 2 файли:

1. requirejs-config.js

Це конфігураційний файл RequireJS, у якому підключається змішувач. Створіть його у папці модуля, зі шляхом:

view/%area%/requirejs-config.js

помістіть код:

var config = {
config: {
mixins: {
'VendorName_ModuleName/js/folder1/folder2/somefile' : {'My_Module/js/folder1/folder2/somefile-mixin':true}
}
},
}

 

2. Власне змішувач somefile-mixin.js.

Збережіть його у папці вашого модуля зі шляхом:

view/%area%/web/js/folder1/folder2/somefile-mixin.js

та додайте код:

define(
[
     'jquery',
        'underscore',
        'ko',
         'uiComponent',
         'uiRegistry',
],
    function (
        $,
        _,
        ko,
        Component,
        registry,
    ) {
'use strict';
        var mixin = {
            method1: function() { /* my code */ },
        };
        return function (target) {
           return target.extend(mixin);
        };
}
);

Після збереження змін не забудьте перегенерувати статичний контент, виконайте CLI команду:

php bin/magento setup:static-content:deploy