从bootstrapper.ts入口点运行的main.ts如下(减去引用标题):
import Dialogs = App.Widgets.Dialogs;
declare var $ : JQueryStatic;
export class Bootstrapper {
static SiteLoad() {
var dialog = new Dialogs.LoginDialog();
...
}
}但是,当main.ts试图加载此文件时,第一行将立即引发引用错误。这时,我意识到导入内部模块不会向生成的define文件的.js包装器添加任何依赖项。
那么如何在运行时解析内部模块呢?是因为AMD只与外部模块兼容,而我必须在main.ts的入口点加载内部模块和外部库吗?
与外部模块相比,我更喜欢内部模块的别名语法。上面的代码比使用外部模块语法时要干净得多:
import Dialogs = module("Modules/App.Widgets.Dialogs");
declare var $ : JQueryStatic;
export class Bootstrapper {
static SiteLoad() {
var dialog = Dialogs.App.Widgets.Dialogs.LoginDialog(); //Seriously?
...
}
}太丑了。该怎么办呢?
更新:
史蒂夫,你建议的方法是有局限性的。在我最初使用内部模块的方法中,我可以做以下工作:
import Dialogs = App.Widgets.Dialogs;
declare var $ : JQueryStatic;
export class Bootstrapper {
static SiteLoad() {
var loginDialog1 = new Dialogs.LoginDialog(); //Instantiation -OK
var loginDialog2: Dialogs.LoginDialog; //Type-Declaration -OK
}
}在这种方法中,您建议我失去为类型声明使用别名的能力:
import DialogsModule = module("Modules/App.Widgets.Dialogs");
var Dialogs : DialogsModule.App.Widgets.Dialogs;
declare var $ : JQueryStatic;
export class Bootstrapper {
static SiteLoad() {
var loginDialog1 = new Dialogs.LoginDialog(); //Instantiation -OK
var loginDialog2: Dialogs.LoginDialog; //Type-Declaration -ERROR: The name "Dialogs" does not exist in the current context
var loginDialog3: DialogsModule.App.Widgets.Dialogs.LoginDialog; //Must use full name instead
}
}发布于 2013-01-21 09:30:46
您可以将长模块路径化名为:
import DialogModule = module("Modules/App.Widgets.Dialogs");
var dialogs = DialogModule.App.Widgets.Dialogs;
declare var $ : JQueryStatic;
export class Bootstrapper {
static SiteLoad() {
var dialog = dialogs.LoginDialog();
...
}
}您可以通过自己包含适当的文件来将AMD与普通的JavaScript混为一谈--但是我建议在您的程序中选择一种模式来使事情更容易理解。
https://stackoverflow.com/questions/14431115
复制相似问题