私はやや大規模なバックボーン ベースの Web アプリを実行しており、バックボーン リレーショナルを使用しています。一対多の関係でカスタム関数を使用できるかどうか疑問に思っていました。
IE 国モデルがあり、それが複数のメタデータ モデル (それぞれが型属性を持つ) に関連している場合、関連するコレクションを特定の型にフィルター処理する関数を作成したいと考えています。これは最良の例ではありません (プロジェクトの詳細について公に言及したくありません) が、ここに私が作成したサンプル コードを示します (100% 正しいとは限りませんが、アイデアは理解できます)。
var Country = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'metas',
relatedModel: Metadata,
collectionType: MetadataCollection,
reverseRelation: {
key: 'country',
includeInJSON: '_id'
}
}
]
});
var Metadata = Backbone.RelationalModel.extend({
subModelTypes: {
'landmark' : 'Landmark',
'city' : 'City'
}
});
var Landmark = Metadata.extend({});
var City = Metadata.extend({})
var MetadataCollection = Backbone.Collection.extend({
model: Metadata,
filterType: function(type){
this.filter(function(meta){
return meta.get('type') === type;
})
}
});
var Countries = Backbone.Collection.extend({
model: Country
})
var countries = new Countries([
{
name: 'Australia',
metas: [
{
type: 'landmark',
name: 'Uluru'
},
{
type: 'landmark',
name: 'Sydney Opera House'
},
{
type: 'city',
name: 'Sydney'
}
]
}
]);
countries.get(1).get('metas').filterType('landmark')
// TypeError: Object [object Object] has no method 'filterType'
あなたがこれを行うことができるかどうか誰かが知っていますか?これを行う別の良い方法があれば (同じコレクションに異なる型を保持しながら)、知りたいです。
ありがとう!