从字符串内容而不是文件加载Dojo类
对于非常特殊的情况,我希望将从远程加载的Dojo类(即源)存储在localStorage中,以便在脱机情况下访问它们(我们谈论的是混合移动应用程序)。我运行了所有程序,但是dojo.eval不允许我从这样的字符串创建类从字符串内容而不是文件加载Dojo类,dojo,classloader,require,Dojo,Classloader,Require,对于非常特殊的情况,我希望将从远程加载的Dojo类(即源)存储在localStorage中,以便在脱机情况下访问它们(我们谈论的是混合移动应用程序)。我运行了所有程序,但是dojo.eval不允许我从这样的字符串创建类 var data = 'define(["dojo/_base/kernel",...'; // class definition as string dojo.eval(data); 你知道如何做到这一点吗?如果你需要让你的应用程序离线运行,请将资源(css、图像、js)存储
var data = 'define(["dojo/_base/kernel",...'; // class definition as string
dojo.eval(data);
你知道如何做到这一点吗?如果你需要让你的应用程序离线运行,请将资源(css、图像、js)存储在。清单文件如下所示
{
"name": "My App",
"description": "My elevator pitch goes here",
"launch_path": "/",
"icons": {
"128": "/img/icon-128.png"
},
"developer": {
"name": "Your name or organization",
"url": "http://your-homepage-here.org"
},
"default_locale": "en"
}
您的应用程序可能需要数百个模块,因此为了提高清单的性能和可管理性,您需要创建一个可将js文件的数量减少到一个或多个,具体取决于您创建构建的方式。我终于完成了我要完成的任务。但是,我没有找到使用localStorage和从字符串加载类的方法。 诀窍是使用XHR从远程加载Dojo类源文件,使用Cordova文件API存储它,获取存储文件的URL并在require()中使用此URL。
执行我想要的操作,并让我完全控制缓存文件。谢谢。是的,标准的离线处理对于标准情况来说是很好的(尽管我从来没有让它在混合应用程序中正常工作)。但是我事先不知道JS文件。在运行时,我根据远程加载的动态配置文件加载这些自定义创建的文件一次。我想存储它们,以便为性能原因或脱机情况做好准备。唯一缺少的链接是类加载器define和declare,它在eval中运行时似乎不起作用。它不声明Dojo类。为此,您需要
declare()
。我不明白你为什么需要评估模块定义。为什么不在需要时调用define(…)
或require()
?除了定义一个模块,您还试图通过计算这个字符串来实现什么?您是否试图通过在运行时加载模块来获得性能?如果是这样,就不需要eval了require()
应该可以做到这一点。如果要确保运行时加载的模块来自本地存储,请将它们添加到清单中。