Magento2-jQuery 위젯을 확장하는 방법 (configurable.js)


17

기본 구성 가능한 옵션 레이블 'Choose an Option ...'을 속성 이름으로 바꾸는 확장을 만들고 있습니다 (예 : 'Choose a Color ...').

jQuery 위젯 configurable.js를 확장하고 재정의하지 않는 방법은 무엇입니까?

설명서에서 jQuery 위젯을 재정의 할 수 있다는 것을 알고 있으므로 다음과 같이했습니다.

define([
    'jquery',
    'jquery/ui',
    'configurable' // usually widget can be found in /lib/web/mage dir
], function($){

    $.widget('silvan.configurable', $.mage.configurable, {

    });

    return $.silvan.configurable;
});

이 파일을 어떻게 초기화 할 수 있습니까? requirejs-config를 통해로드해야합니까? 지도 기능은 올바른 재정의만을위한 것입니까?

이 줄만 수정할 수 있습니까? 이 함수에서 호출됩니다.

_fillSelect: function (element) {}

답변:


28

먼저 모듈 Magento_ConfigurableProduct의 순서가 module.xml다음 과 같은지 확인해야합니다 .

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_ModuleName" setup_version="1.0.0">
        <sequence>
            <module name="Magento_ConfigurableProduct"/>
        </sequence>
    </module>
</config>

의 구성 요소 목록을 재생성해야합니다 config.php. 그렇지 않으면 순서가 무시됩니다 ( http://devdocs.magento.com/guides/v2.2/extension-dev-guide/build/module-load-order.html )

그런 다음 코드 requirejs-config.jsview/frontend디렉토리 에 파일을 추가 하십시오 .

var config = {
    map: {
        '*': {
            configurable: 'Vendor_ModuleName/js/configurable'
        }
    }
};

마지막으로 다음을 사용 configurable.js하여 view/frontend/web/js디렉토리 에 파일을 추가 하십시오 .

define([
    'jquery',
    'jquery/ui',
    'Magento_ConfigurableProduct/js/configurable'
], function($){

    $.widget('silvan.configurable', $.mage.configurable, {
        //code you want to override
    });

    return $.silvan.configurable;
});

한 줄을 수정할 수는 없지만 내부에서 단일 기능을 수정할 수 있습니다.


함수 수정은 어떻게 작동합니까? 부모에게 전화하는 방법?
Alex

위젯의 일부인 것처럼 수정 한 것 이외의 함수를 호출 할 수 있습니다. 귀하의 silvan.configurable자동 부모로부터 모두를 상속합니다.
Bartłomiej Szubert

2
감사합니다. @Ideo! 현상금은 7 시간 내에 제공됩니다 (스택 교환 한도). @Alex this._super ();를 사용하여 부모를 호출 할 수 있습니다. 함수. 참조 : learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…
Silvan

다른 할 일이 있습니까? 내 사용자 정의 파일이로드되지 않습니다 ... 위에 설명 된 것처럼 정확
합니까

1
이것은 잘 작동합니다! @ roman204 같은 문제가 있습니다. module.xml 파일에 "sequence"노드가 있는지 확인하십시오. 그런 다음 모듈 순서를 다시로드하는 것이 중요합니다. 현재이를 수행 할 수있는 유일한 방법은 module.xml 파일에 "시퀀스"를 넣은 모듈을 비활성화했다가 다시 활성화하는 것입니다. (추가 정보 :이 페이지에서 파란색 부분보기 : devdocs.magento.com/guides/v2.2/extension-dev-guide/build/… )
Stijn Duynslaeger-Echron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.