कैसे मिश्रणों Magento 2.1.1 के साथ विजेट समारोह को फिर से लिखना है


17

हमारे पास है swatch-renderer.js

इस फ़ाइल में कुछ विजेट हैं।

....
    $.widget('mage.SwatchRenderer', {
....

    /**
     * @private
     */
    _init: function () {
        if (this.options.jsonConfig !== '' && this.options.jsonSwatchConfig !== '') {
            this._sortAttributes();
            this._RenderControls();
        } else {
            console.log('SwatchRenderer: No input data received');
        }
    },

    /**
     * @private
     */
    _sortAttributes: function () {
        this.options.jsonConfig.attributes = _.sortBy(this.options.jsonConfig.attributes, function (attribute) {
            return attribute.position;
        });
    },

मैं इसके कुछ कार्यों को फिर से लिखना चाहता हूं।

इसे करने का उचित तरीका क्या है?

Magento लाइब्रेरी में स्पष्टीकरण अब वास्तविक नहीं हैं, वे उन कक्षाओं पर जुड़े हुए हैं जो एक और दृष्टिकोण का उपयोग कर रहे हैं (मैं जगह-आदेश के बारे में बात कर रहा हूं। js / place-order-mixin.js)। और वर्णित उदाहरण किसी भी तरह से यह नहीं समझाते हैं कि विजेट फ़ंक्शन को फिर से कैसे लिखना है।

जवाबों:


39

requirejs-config.js

var config = {
    config: {
        mixins: {
            'Magento_Swatches/js/swatch-renderer': {
                'path/to/your/mixin': true
            }
        }
    }
};

path / to / अपने / mixin.js

define([
    'jquery'
], function ($) {
    'use strict';

    return function (widget) {

        $.widget('mage.SwatchRenderer', widget, {
            _Rebuild: function () {
                console.log('Hello from rebuild', arguments);
                return this._super();
            }
        });

        return $.mage.SwatchRenderer;
    }
});

3

संपादित करें: मेरा जवाब मिश्रण का उपयोग नहीं कर रहा है। मेरी जानकारी के लिए, मिक्सिंस केवल तरीकों को फिर से लिखने और गुणों के लिए काम करते हैं। आपके मामले में, यह शुद्ध जेएस को सीधे एक विधि के बाहर कहा जा रहा है।

आप इसे एक मॉड्यूल के माध्यम से कर सकते हैं।

में Vendor/Module/view/frontend/requirejs-config.jsआप निम्नलिखित जोड़ सकते हैं:

var config = {
    map: {
        '*': {
            'Magento_Swatches/js/swatch-renderer':'Vendor_Module/js/swatch-renderer'
        }
    }
};

फिर आप Vendor/Module/view/frontend/web/js/swatch-renderer.jsमूल swatch-renderer.jsफ़ाइल की प्रतिलिपि बनाकर फ़ाइल बना सकते हैं और इसकी सामग्री को संशोधित कर सकते हैं कि आप क्या करना चाहते हैं।


राफेल , लंबे समय तक जवाब न देने के लिए खेद है। खाली समय नहीं था। दूसरे शब्दों में, विजेट विधियों को फिर से लिखने का कोई उचित तरीका नहीं है? केवल पूर्ण पूर्ण पुनर्लेखन? मेरा मतलब है कि अगर Magento मौजूदा फ़ाइल को अपडेट करता है - तो हमें अपने पुनर्लेखन को अपडेट करना होगा।
झारत्तुनिक

@zhartaunik यह पूरी तरह से मिश्रण का उपयोग कर विजेट तरीकों को फिर से लिखना संभव है। आपके मामले में समस्या यह है कि स्वैच-रेंडर फाइल में कोई विधि नहीं है, यह एक एकल स्क्रिप्ट है। उसके कारण हम मिश्रण का उपयोग नहीं कर सकते हैं और इस तरह पूर्ण पुनर्लेखन करना होगा। AFAIK यह करने का एकमात्र तरीका है
राफेल में डिजिटल पियानोवाद

@RaphaelatDigitalPianism मैं वही काम करने की कोशिश कर रहा हूं जैसा आप वर्णन करते हैं लेकिन लगातार प्राप्त कर रहे हैं Uncaught TypeError: base is not a constructor- कोई विचार क्यों? धन्यवाद
टॉम बर्मन

आपको मिश्रण के SwatchRendererसाथ विजेट को फिर से लिखने में सक्षम होना चाहिए क्योंकि फ़ंक्शन defineअंत में पास हो गया है return $.mage.SwatchRenderer;। मैं एक ही फाइल में परिभाषित अन्य विजेट के बारे में नहीं जानता SwatchRendererTooltip
अस्पष्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.