0

バックボーン モデルでカスタム idAttribute を定義すると、findOrCreate は機能しません。

Uncaught Error: Cannot instantiate more than one Backbone.RelationalModel
with the same id per type!  

これは TypeScript の問題だと思います。関係あるか分かりませんが、TypeScriptでクラスを作成し、idAttributeを以下のように設定すると、オブジェクト自体に明示的な「idAttribute」プロパティがあることが分かります。 JavaScript;

module Application.Models {
    export class Zoo extends Backbone.RelationalModel {
        constructor(options?) {
            this.relations = [{
                type: Backbone.HasMany,
                key: 'animals',
                relatedModel: 'Application.Models.Animal',
                collectionType: 'Application.Models.AnimalCollection',
                reverseRelation: {
                    key: 'livesIn',
                    includeInJSON: 'id'
                }
            }];
            super(options);
        }
    }

    export class Animal extends Backbone.RelationalModel {
        constructor(options?) {
            this.idAttribute = "AnimalId";
            super(options);
        }
    }

    export class AnimalCollection extends Backbone.Collection {
            constructor(options?) {
            super(options);
            this.model = 'Application.Models.Animal';
        }
    }
}

var artis = new Application.Models.Zoo({ name: 'Artis' });
var lion = new Application.Models.Animal({ AnimalId: 123, species: 'Lion', livesIn: artis });

Application.Models.Animal.findOrCreate({ AnimalId: 123 }); // FIRST TIME FINE
Application.Models.Animal.findOrCreate({ AnimalId: 123 }); // SECOND TIME - NOT FINE
4

2 に答える 2

1

プロトタイプで idAttribute プロパティを定義する必要があります。コードは、クラスのすべてのインスタンスに対して idAttribute を定義します。

サポートするブラウザーに応じて、Getter メソッドを使用して TypeScript でこれを行うことができます。

export class Animal extends Backbone.RelationalModel {
    public get idAttribute () { return 'AnimalId' }
}

バニラ JavaScript を使用して定義した後、クラスに追加することもできます。

Animal.prototype.idAttribute = 'AnimalId';
于 2013-07-10T16:02:48.280 に答える
0

は。コンストラクターの代わりに initialize で idAttribute を設定すると、動作するように見えます。

initialize: function(attributes) {
        this.id = attributes['AnimalId'] || attributes['id'];
      },
于 2013-07-01T18:36:52.063 に答える