我在网上到处都看了看,但我似乎找不到在Est Js 4模型中实现多对多关联的方法。以原型为例。我有一个带有“帖子”和“标签”的应用程序。我如何在Ext Js 4模型中表示这一点,并按标签按帖子和帖子过滤标签?
答案 0 :(得分:4)
ManyToMany意味着有一些额外的表(或数组)来包含A和B之间的链接。所以实现这一点的唯一方法是使用额外的存储。
如果有很多项目,每个项目可以属于许多类别,这里是模型定义:
Ext.define('BS.model.Item', {
extend: 'Ext.data.Model',
fields: [
{name: 'name' , type: 'string'},
],
proxy: {
type: 'direct',
api: {
create: Items.Create,
read: Items.GetTree,
update: Items.Update,
destroy: Items.Delete,
},
},
hasMany: {model: 'BS.model.ItemInCategory', name: 'categories', foreignKey: 'itemId'},
});
Ext.define('BS.model.ItemCategory', {
extend: 'Ext.data.Model',
fields: [
{name: 'name' , type: 'string'},
],
proxy: {
type: 'direct',
api: {
create: ItemCategories.Create,
read: ItemCategories.Read,
update: ItemCategories.Update,
destroy: ItemCategories.Delete,
},
},
});
Ext.define('BS.model.ItemInCategory', {
extend: 'Ext.data.Model',
fields: ['itemId', 'categoryId'],
// This will allow create operations with multiple records
clientIdProperty: 'clientId',
proxy: {
type: 'direct',
api: {
create: ItemInCategory.Create,
read: ItemInCategory.Read,
destroy: ItemInCategory.Destroy,
},
reader: {
type: 'json',
root: 'data',
},
},
});
然后获取项目所属的所有类别:
Item.categories().load({
scope: this,
callback: function( aRecords, aOperation, aSuccess) {
Ext.each( aRecords, function( aAssociation ) {
// Do something here
}, this);
}
});
然后添加关联:
var iNewRecord = Item.categories().model.create( { categoryId: '16' } );
Item.categories().add( iNewRecord );
答案 1 :(得分:1)
对于在搜索时发现此问题的人,从ExtJS 5.0开始,他们本地支持多对多关系:
http://docs.sencha.com/extjs/5.0.0/apidocs/#!/api/Ext.data.schema.ManyToMany
答案 2 :(得分:0)
对于ExtJS 6,也实现了ManyToMany。
最小化实施:
Ext.define('App.models.Group', {
extend: 'Ext.data.Model',
manyToMany: [
'User'
]
});