2

我正在尝试将 Backbone 与 Typescript 一起使用,并且我没有遵循 Typescript 的语法来定义集合将包含哪种类型的模型。

module Application.Collections {
    export class Library extends Backbone.Collection {
        model = Application.Models.Book; // THIS LINE DOESN'T WORK
        constructor(options?) {
            super(options);
        };
    }
}

module Application.Models {
    export class Bookextends Backbone.Model {
        constructor(options?) {
            super(options);
        }
    }
}

我得到的错误是:

Type of overridden member 'model' is not subtype of original
member defined by type 'Collection';

我也不清楚什么时候应该将这样的定义放在构造函数中,或者它是否重要。我试过了:

constructor(options?) {
        super(options);
        this.model = Application.Models.Entity;
};

其中说:

Cannot convert 'new(options?:any) => Models.Template' to 'Backbone.Model'

我真正想做的是定义一个具有一些实用方法的模型类型 - 当从服务器获取基本模型数据时,我希望模型根据服务器数据初始化和计算一些便利属性。但这并没有发生,因为 collection.fetch() 不认为返回模型是任何特定类型的。

4

2 回答 2

2

在“super(options);”之前声明模型

    module Application.Models {
         export class Book extends Backbone.Model {
         constructor(options?) {
             super(options);
         }
    }    

    module Application.Collections {
        export class Library extends Backbone.Collection {

            constructor(options?) {
                this.model = Application.Models.Book;
                super(options);
            };
        }
    }
于 2013-06-17T16:40:44.893 回答
1

如果要键入该变量,可以使用:

model: Application.Models.Book;

如果你想要运行时的类名,你可以使用一个字符串,或者在运行时获取类名的这种方法

model = 'Application.Models.Book';

或者

model = Describer.getName(someObject);

第二种方法有一个限制,您只能获取类名,而不是完整路径。

于 2013-06-17T16:17:20.680 回答