我需要一些帮助。我在BackboneJS中定义了模型和集合
export class MyModel extends Backbone.Model {
constructor(options?) {
this.urlRoot = 'apiURL/getmymodel';
this.idAttribute = 'ID';
super(options);
}
myMethod(): any {
...
}
}
export class MyCollection extends Backbone.Collection {
model = MyModel;
url = 'apiURL/getmycollection';
}
在UnderscoreJS模板中,我想像这样调用MyModel方法myMethod()
myCollection.each(function(myModel) {
myModel.myMethod();
}
但是我在调用myMethod()
时遇到异常TypeError: undefined is not a function
我正在做某事。错误或者每个都不可能将集合中的模型转换为定义的类型?如果没有,为什么甚至定义了集合项的类型?
答案 0 :(得分:0)
您收到此错误是因为Typescript编译器认为myModel
的类型为Backbone.Model
,就像您的代码是:
myCollection.each(function(myModel: Backbone.Model) { // Error!
myModel.myMethod();
});
在myMethod()
上不存在Backbone.Model
失败的内容。骨干类型定义在Backbone.d.ts
文件中定义。
要解决您的问题,您需要通过指定模型类型来帮助Typecript进行类型推断:
myCollection.each(function(myModel: MyModel) { // Works as you expect
myModel.myMethod();
});
编辑:好的,我确实在一个打字稿文件中重新创建了它,所以它在那个环境中工作。
我认为解决此问题的最佳方法是直接在model
上定义prototype
属性:
export class MyCollection extends Backbone.Collection {
url = 'apiURL/getmycollection';
}
MyCollection.prototype.model = MyModel;