У меня есть две сущности, Пользователь и Роль как с manyToMany ассоциацией друг с другом.
Затем у меня есть сетка, отображающая список пользователей и права на форму с данными пользователя, включая теги, которые будут показывать и разрешать отдельные роли для пользователя.Extjs5 bound tagfield
Если привязка для tagfield устанавливается как
bind: {
store: '{roles}',
value: '{mainGrid.selection.roles}'
}
тогда не показывает ту роль, которую пользователь уже имеет и бросает:
"Uncaught TypeError: parentData[association.setterName] is not a function"
когда один пытается установить пользователь роли
Таким образом, я также пытался связать значение tagfield к формуле, как
bind: {
store: '{roles}',
value: '{userRoles}'
}
, а в поле tagfield показаны роли выбранного пользователя, но я не знаю, как вернуть выбранные роли в пользовательский объект.
Мои модели:
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'
}
}
}
});
определение tagfield:
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, поэтому, возможно, мне не хватает какой-либо конфигурации в ассоциациях моделей, я не знаю. У меня много googled, но мне не хватает информации о связанном теге. Любая помощь будет с благодарностью оценена.