簡體   English   中英

使用TypeScript的主干關系-使用自定義idAttribute時findOrCreate不起作用

[英]Backbone Relational with TypeScript - findOrCreate not working when using custom idAttribute

當我在Backbone模型上定義自定義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

idAttribute屬性應在原型上定義。 您的代碼為該類的每個實例定義了idAttribute。

根據您要支持的瀏覽器,可以使用getter方法在TypeScript中執行此操作。

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

使用vanilla JavaScript定義后,您也可以將其添加到類中。

Animal.prototype.idAttribute = 'AnimalId';

如果您在initialize中而不是構造函數中設置idAttribute,它似乎可以工作:

initialize: function(attributes) {
        this.id = attributes['AnimalId'] || attributes['id'];
      },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM