require
函數聽起來像它可以用於您的目的。它允許加載模塊,但不能定義新的模塊。
您的裝載機可以調用的函數,例如在需要時以下動態加載模塊:
function loadParser(name, fn) {
require(["parsers/" + name], fn);
}
name
將是解析器的名稱或路徑或東西(注意,我的路只是一個例如)和fn
是加載完成後調用的回調函數。函數的第一個參數是加載的模塊。
此功能可以被放置在您的裝載機對象或只是坐在裏面的定義:
define(function() {
function Loader(text) {
this.text = text;
this.parser = null;
this.loadParser();
}
Loader.prototype.loadParser = function() {
var self = this;
var parserName = this.getParserName();
require(["parsers/" + parserName], function (Parser) {
self.parser = Parser;
self.parse();
});
}
Loader.prototype.getParserName = function() {
//mystery logic to determine language...
return "some-parser-name";
}
Loader.prototype.parse = function() {
if (!this.parser) {
throw "No parser loaded";
}
//do your parsing logic...
}
return Loader;
});
現在,如果我真的這樣做了,我會用Q
或jQuery的deferreds或東西內解決解析器回調函數,而不是所有那些函數調用。
感謝您的回答。 JQuery Deffered幫助我解決我的問題:) –