2

Typescript で Backbone を使用しようとしていますが、コレクションが保持するモデルのタイプを定義する方法について 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);

この 2 番目の方法には、絶対パスではなくクラス名のみを取得するという制限があります。

于 2013-06-17T16:17:20.680 に答える