Magento2-如何扩展jQuery小部件(configurable.js)


18

我正在创建一个扩展,用属性名称替换默认的可配置选项标签“选择选项...”,例如“选择颜色...”。

如何扩展(而不是覆盖!)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) {}

Answers:


29

首先,您需要确保模块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;
});

您无法修改单行,但可以在其中修改单个函数。


修改功能如何工作?怎么称呼父母?
亚历克斯

您可以调用除您修改的函数以外的函数,就像它是您的小部件的一部分一样。您silvan.configurable自动从父级继承所有。
巴特洛梅耶Szubert

2
效果很好,谢谢@Ideo!赏金将在7小时内(stackexchange的限制)给予。@Alex,您可以使用this._super();来调用父对象。功能。请参阅:learn.jquery.com/jquery-ui/widget-factory/extending-widgets/…–
Silvan

还有什么要做的吗?导致我的自定义文件无法加载...是否如上面所述准确:-(
roman204

1
这很棒!@ roman204我遇到了同样的问题:确保您的module.xml文件中有“ sequence”节点。然后,重新加载模块订单很重要。目前唯一的方法是禁用并重新启用将“序列”放在module.xml文件中的模块。(更多信息:查看此页面上的蓝色部分:devdocs.magento.com/guides/v2.2/extension-dev-guide/build/…
Stijn Duynslaeger-Echron
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.