gpt4 book ai didi

backbone.js - 集合上的 Backbone 关系函数

转载 作者:行者123 更新时间:2023-12-02 05:06:00 24 4
gpt4 key购买 nike

我正在做一个有点大的基于主干的网络应用程序,并且我正在使用主干关系。我想知道我是否可以在一对多关系上有一个自定义函数。

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'

有谁知道你能不能做到这一点?如果有另一种好方法可以做到这一点(同时仍将不同类型保留在同一个集合中),我很想知道。

谢谢!

最佳答案

创建单独对象以充当您的集合的代理的一般模式。代理包含对基本集合的引用和它自己的包含缩减集的集合。然后,此代理监听基本集合上的事件并相应地更新过滤后的集合,并根据需要转发事件。有了这个,您可以像往常一样从基本集合中添加、更新和删除模型,让代理根据需要自行更新,并将您的 View 或任何消耗过滤集合的东西连接到代理。

由于手动执行此操作有点痛苦且容易出错,我建议使用此库:https://github.com/jmorrell/backbone.obscura

如果您熟悉关系数据库中 View 的概念,这也是同样的想法。

关于backbone.js - 集合上的 Backbone 关系函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com