在TypeScript类中初始化Knockout observableArray的正确方法是什么?
我正在做这样的事情:
module ViewModel {
declare var ko;
export class IndexPageViewModel {
agencies: any;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
var ivm = new ViewModel.IndexPageViewModel();
ivm.agencies.push({name: "name", alias : "alias"});
for (var i = 0; i < ivm.agencies.length; i++){
alert(ivm.agencies[i].name);
}
看起来很简单,但当我尝试按指示访问agencies属性时,执行会挂起。我错过了什么吗?
答案 0 :(得分:13)
这一行是您的错误所在:
agencies[i]
当你访问一个可观察的数组时,它实际上包含在一个函数中,所以你可以访问它:
agencies()[i]
还要帮自己一个忙,并从以下位置下载Knockout定义: https://github.com/borisyankov/DefinitelyTyped
然后使用类型声明属性:
module ViewModel {
export class IndexPageViewModel {
agencies: KnockoutObservableArray;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
答案 1 :(得分:5)
我刚刚在TypeScript 1.3中做过这个(尽管它也适用于旧版本):
pendingAddAssociations: KnockoutObservableArray<ControllerModel> = ko.observableArray<ControllerModel>([]);
例如,如果您有代理商类。
export class IndexPageViewModel {
agencies: KnockoutObservableArray<Agency>;
constructor () {
this.agencies = ko.observableArray<Agency>([]);
}
}
我还发现您可以投放到任何this.agencies = <any>[];
如果您使用的是Knockout ES5 plugin,这非常有用。