Magento2: Làm cách nào tôi có thể ghi đè mô-đun js core-box.js


15

Tôi cần gia hạn Magento_Catalog/js/price-box.js. Tôi đã sử dụng tính năng 'mixins', nhưng nó không hoạt động 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, Cung cấp thêm một số thông tin về điều này.
Codrain Technolabs Pvt Ltd

Câu trả lời:


12
  1. Chỉ định tệp js của PriceBox trong mô-đun tùy chỉnh của bạn requirejs-config.jscó cùng tên mà nó đã được khai báo trong các mô-đun lõi. trong trường hợp của chúng tôi nó priceBoxgiống như dưới đây. Các mô-đun của bạn requirejs-config.jssẽ giống như

    var config = {
        map: {
             '*': {
                    priceBox:'namespace_modulename/js/custompricebox',
             }
        }
    };
  2. Bây giờ, tạo tập tin custompricebox.jstheo đường dẫn được chỉ định ở trên. tôi giả sử bạn muốn mở rộng reloadPricephương thức trong hộp giá. vì vậy bạn custompricebox.jssẽ giống như dưới đây.

    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. Xin lưu ý mã này không được kiểm tra. có thể có một số lỗi cú pháp. Hãy cho tôi biết nếu bạn cần thêm trợ giúp về điều này.


Xin chào Yagnesh, chúng ta có thể đạt được nó thông qua Mixin không? Thay vì ghi đè lên nó, chúng ta cũng có thể mở rộng nó?
Rajput đáng khen ngợi

@PrafulRajput, tôi chưa sử dụng mixin, tôi chắc chắn sẽ cập nhật cho bạn về điều này một khi tôi làm điều đó.
Codrain Technolabs Pvt Ltd

2
bằng cách nào đó, điều này không làm việc cho tôi (câu 2.1.2). Ngoài ra mage / priceBox cũng cho tôi một số lỗi script.
Cố gắng vào

1
Có ai đó đã thành công để viết lại nó thông qua Mixin?
Pol Ravalitera
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.