使用require.js扩展jquery(多个扩展)?

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

我正在转换一些旧的网站代码,以尽可能利用AMD和按需加载。我遇到的一件事是该网站在某些页面上使用了较旧版本的jquery(我已经弄清楚了如何在重构代码并使用较新的代码进行测试之前配置此参数),但是原始开发人员还添加了一个某些表单对jquery的扩展数。

我最终也会希望重构它们,但是由于它使用许多新的辅助函数来扩展jquery,所以我想知道如何配置require.js以确保加载了这些扩展。最糟糕的情况是,我可以将其附加到jquery.js上,但我不希望这样做,因为有人可能不知道他们在那里,并根据这些扩展名替换了jquery本身破坏了任何代码。

extends块看起来像:

jQuery.fn.extend({
    vshow: function(speed,callback) { /* ... */ },
    vhide: function(speed,callback) {  /* ... */  },
    vshowif: function(b) {  /* ... */  },
    showif: function(b) {  /* ... */  },
    selected: function(i) {  /* ... */  },
    addOptions: function(a,f,p) { /* ... */  },
    setOptions: function(a,f,p) {  /* ... */  },
    validateForm: function(f) {  /* ... */  },
    lt: function(n) {  /* ... */  },
    gt: function(n) {  /* ... */  }
});

我知道我也可以将它们分解为多个jquery.function.js文件,但其中一些只是几行。我想知道是否有一种方法或正确的方法来确保每当使用jquery时在jquery之后加载它们?

javascript jquery requirejs extending
1个回答
0
投票

我有一个临时修复程序,该修复程序是基于一些有关我要升级的代码的因素,但这不是理想的解决方案。 (我想最终的解决方案是将自定义扩展名分成单独的,单独的插件文件,并将它们包括在需要它们的依赖项列表中)

我要处理的问题之一是这是一个旧的代码库。由于当前项目是当务之急,我目前没有时间完全升级/更新所有库并进行全面测试。但是现有代码使用的jquery版本是一个旧版本,甚至可能还不是完全AMD。我的新代码使用的功能是相当基本的(主要是简单的ajax调用),并且可以同时使用新版本和旧版本。我不能确定传统代码的用法或这些扩展的工作方式。

结果,当我告诉require.js加载“旧” jquery以保持与旧代码的兼容性时,必须重新加载jquery并破坏原始表单使用的扩展功能,从而导致失败当未定义扩展功能时,将以静默方式进行。

我暂时通过将上面的extends块放入它自己的.js文件中来解决这个问题,我将其称为jquery-extended.js。然后为以下项添加填充配置:

    "jquery.extended" : {
        "deps" : ['jquery'],
        "exports" : "$"
    },

然后我当前需要jquery的任何lib /模块,我改为将它们的依赖关系更改为jquery.extended,而不仅仅是jquery,它似乎至少允许该代码工作。

但是如果在处理此问题上还有其他建议,我很想知道这些建议。

© www.soinside.com 2019 - 2024. All rights reserved.