Magento2: Как я могу переопределить основной модуль js Price-box.js

15

Мне нужно продлить Magento_Catalog/js/price-box.js. Я использовал функцию «mixins», но она не работает price-box.js.

requirejs-config.js:

var config = {
    config: {
        mixins: {
            'Magento_Catalog/js/price-box': {
                'My_Module/js/price-box/pluggin': true
            }
        }
    }
};

My_Module/view/frontend/web/js/price-box/pluggin.js

define(function () {
    'use strict';

    return function (target) { 
        // modify target
        var reloadPrice = target.reloadPrice;
        target.reloadPrice = function() {
           cosole.log("hello");
        };
        return target;
    };
});
Йогеш Кародия
источник
Йогеш, дай еще немного информации об этом.
Codrain Technolabs Pvt Ltd

Ответы:

12
  1. Укажите js-файл PriceBox в ваших пользовательских модулях requirejs-config.jsс тем же именем, по которому он уже объявлен в основных модулях. в нашем случае это priceBoxкак ниже. Ваши модули requirejs-config.jsбудут что-то вроде

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Теперь создайте файл custompricebox.jsпо указанному выше пути. Я предполагаю, что вы хотите расширить reloadPriceметод в прайс-листе. так что ваш custompricebox.jsбудет как ниже.

    define(
        [
            'jquery',
            'Magento_Catalog/js/price-utils',
            'underscore',
            'mage/template',
            'mage/priceBox',
            'jquery/ui'
        ],
        function ($, utils, _, mageTemplate) {
    
            'use strict';
    
            $.widget('yournamespace.custompriceBox', $.mage.priceBox, {
                /**
                 * Render price unit block.
                 */
                reloadPrice: function reDrawPrices() {
    
                    var priceFormat = (this.options.priceConfig && this.options.priceConfig.priceFormat) || {},
                        priceTemplate = mageTemplate(this.options.priceTemplate);
    
                    _.each(this.cache.displayPrices, function (price, priceCode) {
                        price.final = _.reduce(price.adjustments, function(memo, amount) {
                            return memo + amount;
                        }, price.amount);
    
                        // you can put your custom code here. 
    
                        price.formatted = utils.formatPrice(price.final, priceFormat);
    
                        $('[data-price-type="' + priceCode + '"]', this.element).html(priceTemplate({data: price}));
                    }, this);
                },
    
    
            });
    
            return $.yournamespace.custompriceBox;
        }
    );
  3. Обратите внимание, что этот код не проверен. Там могут быть некоторые ошибки синтаксиса. дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.

Codrain Technolabs Pvt Ltd
источник
Привет Ягнеш, мы можем достичь этого через Mixin? Вместо того, чтобы переопределить это, мы можем расширить это тоже?
Praful Раджпут
@PrafulRajput, я еще не использую mixin, я обязательно сообщу вам об этом, как только сделаю это.
Кодрен Технолабс Пвт, ООО
2
почему-то это не работает для меня (версия 2.1.2). Также mage / priceBox действительно дает мне некоторую ошибку скрипта.
TrytoFly
1
Кому-нибудь удалось переписать его через Mixin?
Пол Равалитера