我收到了以下代码
module Absence {
export var instance: AbsenceViewModel;
export class ViewModel {
public items: KnockoutObservableArray<AbsenceItem>;
public reloadData() {
this.items.removeAll();
}
}
}
在我的页面中,我使用此
创建一个实例Absence.instance = new Absence.AbsenceViewModel();
现在我打电话
Absence.instance.reloadData();
它在浏览器控制台中说
无法读取未定义
的属性'removeAll'
但是我导入了我的淘汰库和其他所需的东西。所以它存在。
当我使用内部实例
时Absence.instance.items.removeAll();
我错了什么?
修改:
我在一个单独的JS文件中编写了viewModel的dcklaration和实例的声明。这些文件在页面中被加载。页面准备好后,我在调试控制台中手动实例化ViewModel
的实例。在这里我调用方法reloadData
。因此,当我调用方法时,我可以确定所有类都可用。
答案 0 :(得分:1)
我还不熟悉TypeScript中的get
机制,所以当你能用它来解决你的问题时,我将其作为另一个答案添加,我认为这是解决问题的一般解决方案这个问题。
以下错误:
无法读取未定义
的属性'removeAll'
是由于您未初始化items
数组而导致的。您只是将其声明为ViewModel
类的属性。添加构造函数并以正确的方式初始化属性可以避免这些问题。因此,请将代码更新为:
module Absence {
export var instance: AbsenceViewModel;
export class ViewModel {
public items: KnockoutObservableArray<AbsenceItem>;
constructor(){
this.items = ko.observableArray();
}
public reloadData() {
this.items.removeAll();
}
}
}
答案 1 :(得分:0)
我发现了错误。 我必须创建一个getter来访问该属性。
get elements(): KnockoutObservableArray<AbsenceItem> {
return this.items;
}
之后我可以关注
public reloadData() {
this.elements.removeAll();
}
这对我有帮助