【发布时间】:2014-02-22 23:57:53
【问题描述】:
不,这个话题不会回答我的问题,不,解决方案不仅仅是在 nav.ts 文件中导入Command。 nav.ts 是许多 viewModel 文件之一,它们将根据需要动态加载。唯一的问题是在类的构造函数中设置参数的类型。 (类型必须是“命令”)
在下面将由 require.js 加载的类中,方法viewModel() 动态需要一个新类。在这种情况下NavViewModel。
command.ts
export class Command {
...
public viewModel(name: string, callback: Function) {
require(["noext!boot/getViewModel/" + name], function (viewModel) {
callback(viewModel);
});
}
}
这是viewModel()将获取的类:
nav.ts
export class NavViewModel extends kendo.Router {
constructor(command: Command) {
super();
this.route('/:name', function (name) {
command.view(name, $('div.content'));
});
this.start();
}
}
编辑: 这是入口点(在评论 2 中要求)
main.ts(入口点)
import lib = require("command");
var cmd = new lib.Command();
cmd.viewModel('nav', function (o) {
cmd.view('nav', $('div.header'), function () {
kendo.bind($('.header .nav'), new o.NavViewModel(cmd));
});
});
/编辑
问题:
Visual Studio 将抛出 error TS2095: Could not find symbol 'Command',因为“Command”类未在此模块中定义。
如果“Command”-Type 将从NavViewModel 构造函数中删除,则程序可以正常工作。是否有任何解决方案可以在 NavViewModel 中引用 Command 类?
这行不通:
/// <reference path="../../Scripts/command.ts" />
【问题讨论】:
-
您应该展示如何定义模块的代码。 Command 类与您的 NavViewModel 类在不同的模块中吗?如果是这样,您需要引用整个名称(例如
command: Your.Module.Name.Command)。 -
我添加了 sn-p,它显示了入口点。
-
@Louis 谢谢,但我不认为这是一个重复的问题,因为链接的示例不会在运行时动态加载另一个模块..
-
好的,您需要将NavViewMain 的构造函数的参数设为接口(即ICommand),而不是具体的类,并让您的Command 类实现该接口。每个 viewModel 类都需要引用接口,这样你就可以放弃导入的需要
标签: visual-studio compilation requirejs typescript amd