Magento2-jQueryウィジェットを拡張する方法(configurable.js)


15

デフォルトの構成可能なオプションラベル「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) {}

回答:


26

まず、あなたのモジュールが次の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.js使用してview/frontendディレクトリにファイルを追加します。

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

最後にconfigurable.jsview/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;
});

単一の行を変更することはできませんが、内部の単一の関数を変更することはできます。


関数の変更はどのように機能しますか?親に電話する方法は?
アレックス

ウィジェットの一部であるかのように、変更する関数以外の関数を呼び出すことができます。あなたはsilvan.configurable自動的に親からすべてを継承します。
バートウォミーズベール

2
@Ideo、ありがとうございます!賞金は7時間以内に与えられます(スタック交換の制限)。@Alexでは、this._super()を使用して親を呼び出すことができます。関数。参照:learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…–
シルバン

他に何かすることはありますか?私のカスタムファイルはロードされません...上記のとおり正確に実行しました:
roman204

1
これはうまくいきます!@ roman204同じ問題が発生しました。module.xmlファイルに「sequence」ノードがあることを確認してください。次に、モジュールの順序をリロードすることが重要です。現時点でそれを行う唯一の方法は、module.xmlファイルで「シーケンス」を配置したモジュールを無効にしてから再度有効にすることです。(詳細:このページの青色の部分を参照してください:devdocs.magento.com/guides/v2.2/extension-dev-guide/build/…
Stijn Duynslaeger-17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.