Magento 2 - mixin for mixin

问题描述 投票:0回答:2

如何为已经存在的

mixin
构建
mixin
?有可能吗?

我需要重写

Vendor_Module:js/checkout-mixin
中的一个函数,该函数已经是
mixin
Magento_Checkout:js/something

我尝试在

requirejs-config.js
中设置它,就像我通常定义 mixin 所做的那样,但它不起作用。

直接为

mixin
设置新的
Magento_Checkout:js/something
不是一个选项。

谢谢

magento2
2个回答
0
投票

抱歉,但是如果您想第二次混合已经混合的文件,这是可能的。

这里是 magento 本身提供的 breadcrumbs js 的最佳示例

只需将此代码放入您的 requirejs-config.js 中

var config = {
    config: {
        mixins: {
            'Magento_Catalog/js/product/breadcrumbs': {
                'Vendor_ModuleName/js/breadcrumbs-mixin': true
            }
        }
    }
};

并将此代码放入您自己的 js 目录中的vendor_company模块中

define([
    'jquery',
    'Magento_Catalog/js/product/breadcrumbs',
    'jquery/ui'
], function ($) {
    'use strict';
    return function (widget) {
        $.widget('mage.breadcrumbs', widget, {
            /**
             * {@inheritdoc}
             */
            _getCategoryCrumb: function (menuItem) {
                //do some custom stuff
                return this._super(menuItem);
            },
        });
        return $.mage.breadcrumbs;
    };
});

你可以把你的其他方法像

_getCategoryCrumb: function (menuItem) {
                //do some custom stuff
                return this._super(menuItem);
            },

0
投票

也许我做错了什么,但 Suraj 的解决方案对我不起作用。因此,建议 jQuery 小部件的替代解决方案(我希望类似的方法也适用于组件)

首先用自己的替换现有的mixin

var config = {
  config: {
      mixins: {
          'Magento_Theme/js/view/breadcrumbs': {
              'Magento_Catalog/js/product/breadcrumbs': false,       // Turn off original mixin
              'Vendor_Module/js/product/breadcrumbs-mixin': true,    // Use own mixin
          }
      }
  }
};

第二个基于替换的 mixin 中的小部件创建自己的小部件

define([
    'jquery',
    'Magento_Theme/js/model/breadcrumb-list',
    'Magento_Catalog/js/product/breadcrumbs',
], function(
    $,
    breadcrumbList,
    mageBreadcrumbsWidget,
) {
    'use strict';

    return function(breadcrumbs) {
        let mageBreadcrumbs = mageBreadcrumbsWidget(breadcrumbs);

        return $.widget('my.breadcrumbs', mageBreadcrumbs, {
            // Custom implementation
        })
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.