如何确保Magento 2中的RequireJS在加载其他脚本之前加载jQuery?我发现嵌套需要解决这个问题

问题描述 投票:0回答:1

我正在尝试加载一个需要jQuery才能运行的延迟加载器插件。如果我这样写我的脚本:

require([
        "jquery",
        "ScandiLazy",
    ], function ($) {
        jQuery('.category-products .lazy').lazy();
    });

我明白了:

"jquery.lazy.min.js:43 Uncaught TypeError: Cannot read property 'fn' of undefined",

其次是:

Uncaught TypeError: jQuery(...).lazy is not a function

这是一个错误,因为没有加载jQuery。

但如果我嵌套要求:

 require([ "jquery"], function ($) {
        require([ "ScandiLazy"], function ($) {
            jQuery('.category-products .lazy').lazy();
        });
    });

然后它完美地运作。

但是为了使它成功,嵌套需求是错误的,这实际上是一种正确的方法吗?

如果这是不正确的,那么在ScandiLazy延迟加载插件加载之前,有什么方法可以确保jQuery被加载?

javascript jquery requirejs magento2
1个回答
0
投票

ScandiLazy需要jQuery才能工作,所以你必须告诉RequireJS使用jQueryScandiLazy设置为shim的依赖(更多这里是https://requirejs.org/docs/api.html#config-shim)。快速示例如何解决此问题:

requirejs.config({ // configure RequireJS first
    shim: {
        'path/to/ScandiLazy': ['jquery']
    }
});

require([ // load modules
    "jquery",
    "ScandiLazy",
], function ($) {
    jQuery('.category-products .lazy').lazy();
});
© www.soinside.com 2019 - 2024. All rights reserved.