[英]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.