【发布时间】:2023-03-21 00:26:01
【问题描述】:
我有两个实体,用户和角色,两者都具有多对多关联。
然后我有一个显示用户列表的网格,在右侧有一个包含用户详细信息的表单,包括一个标签字段,它将显示并允许为用户选择角色。
如果标签字段的绑定设置为
bind: {
store: '{roles}',
value: '{mainGrid.selection.roles}'
}
那么它不会显示用户已经拥有的角色并抛出:
“未捕获的 TypeError:parentData[association.setterName] 不是函数”
当尝试设置用户角色时
所以我也尝试将标签字段值绑定到一个公式,如
bind: {
store: '{roles}',
value: '{userRoles}'
}
标签字段显示了所选用户的角色,但我不知道如何将所选角色设置回用户实体。
我的模型是:
Ext.define('App.model.security.User', {
extend: 'App.model.Base',
entityName: 'User',
fields: [
{ name: 'id' },
{ name: 'email'},
{ name: 'name'},
{ name: 'enabled', type: 'bool'}
],
manyToMany: {
UserRoles: {
type: 'Role',
role: 'roles',
field: 'id',
right: {
field: 'id',
role: 'users'
}
}
}
});
和
Ext.define('App.model.security.Role', {
extend: 'App.model.Base',
entityName: 'Role',
fields: [
{ name: 'id' },
{ name: 'name'},
{ name: 'enabled', type: 'bool'}
],
manyToMany: {
RoleUsers: {
type: 'User',
role: 'users',
field: 'id',
right: {
field: 'id',
role: 'roles'
}
}
}
});
标签字段定义:
xtype: 'tagfield',
fieldLabel: 'Roles',
displayField: 'name',
valueField: 'id',
stacked: true,
multiSelect: true,
filterPickList: true,
queryMode: 'local',
publishes: 'value',
bind: {
store: '{roles}',
value: '{userRoles}'
}
和 ViewModel:
Ext.define('App.view.security.user.UsersModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.users',
stores: {
users: {
model: 'App.model.security.User',
pageSize: 15,
autoLoad: true,
session: true
},
roles: {
model: 'App.model.security.Role',
autoLoad: true,
session: true
}
},
formulas: {
userRoles: {
bind: {
bindTo: '{mainGrid.selection.roles.data.items}',
deep: true
},
get: function(value){
return value;
},
set: function(value){
}
}
}
});
这是我第一个使用 Ext 的项目,所以也许我在模型关联中缺少一些配置,我不知道。 我用谷歌搜索了很多,但缺乏有关链接标签字段的信息。 任何帮助将不胜感激。
【问题讨论】: