javascript – RequireJS加载字符串

前端之家收集整理的这篇文章主要介绍了javascript – RequireJS加载字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在我的应用程序中有动态部分从数据库加载为字符串,如下所示:

"define(['dependency1','dependency2'],function(){"+
"   // function body" +
"})"

这只是一个简单的requireJS模块,作为一个字符串.我想使用async require调用延迟加载上面的脚本.所以,我的主要requireJS脚本如下所示:

require(["jquery"],function($){        
    $(document).ready(function(){
        // logic to load specific script from database
        var scriptString = functionToLoadTheStringAbove();

        // ideally i would like to call it like this            
        require([scriptString],function(){
           // scriptString,dependency1,dependency2 are loaded
        }
    });
});

如何在requireJS中加载这些字符串?我知道文本插件,但它只允许从文件加载.我尝试了eval,但它没有正确解决依赖关系.

最佳答案
这已经很晚了,但我只是在这里发布我的解决方案,万一有人需要.

所以我最后在requireJS论坛上询问并检查了text! pluginjson! plugin的源代码.在RequireJS中从String加载模块的最简单方法是使用自己的插件加载String,然后使用onLoad.fromText()来评估你的String并解决所有问题.依赖.

我的插件示例(让我们称之为db!插件):

define([],function(){
    var db = new Database(); // string is loaded from LocalStorage
    return {
        load: function(name,req,onLoad,reqConfig){
            db.get(name,function(err,scriptString){
                if (err) onLoad(err);
                else onLoad.fromText(scriptString);
            });  
         }
    }
});

然后你可以使用插件,如:

require(["jquery","db!myScript"],function($,myScript){        
    // jQuery,myScript and its dependencies are loaded from database
});

注意:

>没有eval,没有办法从String得到require().这就是onLoad.fromText()在内部的作用.因为eval是邪恶的,所以如果你知道你将要使用什么字符串eval(),你应该只使用它.如果您在浏览器扩展中使用它,则可能需要放宽CSP策略.
>要命名您的String模块,可以使用explicit naming syntax.这样,您的模块将始终具有相同的绝对名称.

猜你在找的JavaScript相关文章