我一直試圖使用dojo.require(If)
與本地變量動態加載頁面上的模塊基於條件。dojo.requireIf不允許本地變量
// note: dojo v1.4 djConfig = { debugAtAllCosts: true };
實施例1(不工作):
(function() { var nameOfClass = "Two"; dojo.require("my.namespace." + nameOfClass); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
錯誤:的ReferenceError:未定義nameOfClass。
實施例2(不工作):
(function() { var nameOfClass = "Two"; dojo.requireIf(nameOfClass == "One", "my.namespace.One"); dojo.requireIf(nameOfClass == "Two", "my.namespace.Two"); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
錯誤:的ReferenceError:未定義nameOfClass。
例3(作品):
(function() { window.nameOfClass = "Two"; dojo.requireIf(window.nameOfClass == "One", "my.namespace.One"); dojo.requireIf(window.nameOfClass == "Two", "my.namespace.Two"); dojo.addOnLoad(function() { var oneOrTwo = new my.namespace[nameOfClass](); }); }());
出於某種原因,它看起來好像需要和requireIf只允許在他們裏面的全局變量。這是目前的侷限性,還是我做錯了什麼?
更新1:
因此,如果我理解你(@Maine,@jrburke)正確,這是debugAtAllCosts的限制?如果上述代碼構建爲跨域(添加xd文件前綴/後綴)並執行 - 它將按預期工作?
如果是這種情況,那麼本地測試將作爲跨域執行的代碼的正確方式是什麼,而不進行實際構建?
這也讓我質疑預解析dojo.require(s)的動機。如果loader_xd不會(或者不能)預解析,爲什麼爲測試/調試創建的方法是這樣做的?
更新2:
由於在更新1以上沒有與之密切相關的一個兩個問題,我搬到他們出到separate discussion。
謝謝@jrburke,但使用普通的dojo加載器將不允許測試代碼的行爲,因爲它將在xd構建之後執行;因爲前者將使用同步xhr來檢索dojo.require [s],而不是使用異步「腳本」(loader_xd)。 – 2009-12-17 15:19:10