我發現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