我发现Qooxdoo必须运行动态代码的3种方式。第一种方法是通过内置的零件装载机。 “零件”,基本上是将的Qooxdoo加载“刚好及时”当你真正需要它们的应用程序的部分 - 例如,工作中很少使用的表单或对话框类。这种方法并不是真正动态的(在我看来),因为它要求代码被包含在Qooxdoo提供的构建过程中。解释它的工作原理不在这个答案的范围之内,坦率地说,我自己还不是那么熟悉它。
第二种方式是通过qx.Class.getByName()函数调用。它的工作方式如下:
qx.Class.define("Bacon", {
extend: qx.core.Object,
construct: function(foo, bar) {
this.foo = foo;
this.bar = bar;
}
});
var klass = qx.Class.getByName("Bacon");
var obj = new klass("foo", "bar");
this.debug(obj.foo);
此方法在Qooxdoo邮件列表here上找到。此方法适用于包含在构建过程中的代码和代码动态地推出,但在我看来,是由原因很简单,如果你是动态引入一个新的类,你将不得不使用第三种方法莫须有工作无论如何,第三种方法。
的最后一个方法我所在其实是通过研究源代码,Qooxdoo playground向我透露。 (源代码可以在桌面下载的一部分。)
操场从编辑器读取代码,并创建一个匿名函数出来,然后执行相应的功能。有一堆设置和拆除游乐场围绕下面的代码,但为了简洁和清晰,我已经将它删除。如果您有兴趣自己做类似的事情,我强烈建议查看游乐场应用程序的源代码。动态代码执行包含在810行开始的__updatePlayground函数中(Qooxdoo v3.5)。
var fun;
try {
fun = qx.event.GlobalError.observeMethod(new Function(code));
} catch(ex) {
//do something with the exception
}
try {
fun.call();
} catch(ex) {
//do something with the exception
}
的代码很简单,使用built-in Javascript function“呼”地执行匿名函数。
你怎么想_detect_,它的上传? – abarnert
无所谓,如果它不在那里,我只是显示一个错误。 – jpreed00
我不清楚你想要做什么。你想接受一个新的模块,然后立即动态加载它?或者你想要某种插件机制,人们可以上传新的插件,每次你的应用程序启动时,所有这些插件都会被加载?或者有些不同? – abarnert