Magento2: ¿Cómo puedo anular el módulo core js price-box.js

15

Necesito extender Magento_Catalog/js/price-box.js. He usado la función 'mixins', pero no funciona 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;
    };
});
Yogesh Karodiya
fuente
Yogesh, da más información sobre esto.
Codrain Technolabs Pvt Ltd

Respuestas:

12
  1. Especifique el archivo PriceBox js en sus módulos personalizados requirejs-config.jscon el mismo nombre por el cual ya está declarado en los módulos principales. en nuestro caso es priceBoxcomo a continuación. Tus módulos requirejs-config.jsserían algo así como

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Ahora, cree el archivo custompricebox.jsen la ruta especificada anteriormente. Supongo que desea extender el reloadPricemétodo en el cuadro de precios. así custompricebox.jsque sería como a continuación.

    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. Tenga en cuenta que este código no se ha probado. Puede haber algunos errores de syntex. avíseme si necesita más ayuda en esto.

Codrain Technolabs Pvt Ltd
fuente
Hola Yagnesh, ¿podemos lograrlo a través de Mixin? En lugar de anularlo, ¿podemos extenderlo también?
Praput Rajput
@PrafulRajput, todavía no uso mixin, seguramente lo actualizaré una vez que lo haga.
Codrain Technolabs Pvt Ltd
2
de alguna manera esto no funciona para mí (ver. 2.1.2). También mage / priceBox me da algún error de script.
TrytoFly
1
¿Alguien logró reescribirlo a través de Mixin?
Pol Ravalitera