mixins 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 라이브러리의 설명은 더 이상 실제가 아니며 다른 접근법을 사용하는 클래스에 연결되어 있습니다 (place-order.js / place-order-mixin.js에 대해 말하고 있습니다). 설명 된 예제는 위젯 함수를 다시 작성하는 방법을 설명하지 않습니다.

답변:


40

requirejs-config.js

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

경로 /to/your/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

편집 : 내 대답은 mixin을 사용하지 않습니다. 내 지식으로는 믹스 인은 메소드 재 작성 및 속성에서만 작동합니다. 귀하의 경우 순수한 JS는 메소드 외부에서 직접 호출됩니다.

모듈을 통해 할 수 있습니다.

다음 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원하는 작업에 따라 내용을 수정할 수 있습니다.


Raphael , 오랫동안 응답하지 않아서 죄송합니다. 자유 시간이 없었습니다. 즉, 위젯 메소드를 다시 작성하는 적절한 방법이 없습니까? 완전 재 작성 만? magento가 기존 파일을 업데이트하는 경우 다시 쓰기를 업데이트해야합니다.
zhartaunik

@zhartaunik 믹스 인을 사용하여 위젯 메소드를 다시 작성할 수 있습니다. 귀하의 경우 문제는 견본 렌더링 파일에 메소드가 없으며 하나의 스크립트라는 것입니다. 이 때문에 믹스 인을 사용할 수 없으므로 완전히 다시 작성해야합니다. 이것이 유일한 방법 인 AFAIK
Digital Pianism의 Raphael

@RaphaelatDigitalPianism 나는 당신이 묘사 한 것과 똑같은 일을하려고했지만 계속해서 얻는 것입니다 Uncaught TypeError: base is not a constructor-어떤 아이디어가 있습니까? 감사합니다
Tom Burman

SwatchRenderer전달 된 함수 define가 끝에 있기 때문에 mixin으로 위젯 을 다시 작성할 수 있어야합니다 return $.mage.SwatchRenderer;. 동일한 파일에 정의 된 다른 위젯에 대해 모르겠습니다 SwatchRendererTooltip.
불분명
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.