首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequireJS -动态加载模块

RequireJS -动态加载模块
EN

Stack Overflow用户
提问于 2013-11-15 16:46:11
回答 1查看 1.6K关注 0票数 4

我目前是一个RequireJS的初学者,我有点麻烦的概念,特别是RequireJS定义它的方式。

我的目标是建立一个智能装载机,称为他需要的具体分析器。

总结一下我的需求:

(A)我创建了我的装载机:新装载机(来源)

(B)来源表示要载入的数据。那是一根简单的绳子。

(C)创建一个Loader对象。它执行一些算法来决定使用什么是最好的分析器。最后,它从远程位置下载解析器。最后,动态加载解析器。

我的问题是:如何加载模块/插件而无需在定义中解释它?我无法在定义(TheParserHere)中设置它,因为我无法知道需要哪个解析器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 16:50:23

require函数听起来像是可以用于您的目的。它允许加载模块,但不允许定义新模块。

您的加载程序可以在需要时调用如下函数来动态加载模块:

代码语言:javascript
复制
function loadParser(name, fn) {
    require(["parsers/" + name], fn);
}

name将是解析器的名称或路径或其他东西(请注意,我的路径只是一个示例),而fn是加载完成后调用的回调。函数的第一个参数是加载模块。

这个函数可以放在加载器对象中,也可以放在定义中:

代码语言:javascript
复制
define(function () {

    function Loader(text) {
        this.text = text;

        this.parser = null;
        this.loadParser();
    }

    Loader.prototype.loadParser = function () {
        var self = this;
        var parserName = this.getParserName();
        require(["parsers/" + parserName], function (Parser) {
            self.parser = Parser;
            self.parse();
        });
    }

    Loader.prototype.getParserName = function () {
        //mystery logic to determine language...
        return "some-parser-name";
    }

    Loader.prototype.parse = function () {
        if (!this.parser) {
            throw "No parser loaded";
        }
        //do your parsing logic...
    }

    return Loader;

});

现在,如果我实际上是这样做的,我将使用Q或jquery或其他东西来解析require回调函数中的解析器,而不是所有的函数调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20006209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档