Ich habe zwei Entitäten, Benutzer und Rolle beide mit manyToMany Zuordnung zueinander.
Dann habe ich ein Raster mit der Liste der Benutzer und auf der rechten Seite ein Formular mit Benutzerdetails einschließlich eines Tagfield, die ausgewählte Rollen für den Benutzer anzeigen und zulassen.Extjs5 gebundene Tagfield
Wenn für die Tagfield die Bindung wird als
bind: {
store: '{roles}',
value: '{mainGrid.selection.roles}'
}
es dann zeigen nicht die Rolle, die der Benutzer bereits hat und wirft:
"Uncaught TypeError: parentData[association.setterName] is not a function"
, wenn man versucht, den Benutzer zu setzen Rollen
So habe versucht, ich auch den Tagfield Wert auf eine Formel wie
zu binden 210und das Tag-Feld zeigt die Rollen des ausgewählten Benutzers, aber ich weiß nicht, wie ich die ausgewählten Rollen auf die Benutzereinheit zurücksetzen soll.
Meine Modelle sind:
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'
}
}
}
});
und
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'
}
}
}
});
die Tagfield Definition:
xtype: 'tagfield',
fieldLabel: 'Roles',
displayField: 'name',
valueField: 'id',
stacked: true,
multiSelect: true,
filterPickList: true,
queryMode: 'local',
publishes: 'value',
bind: {
store: '{roles}',
value: '{userRoles}'
}
und das 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){
}
}
}
});
Dies ist mein allererstes Projekt mit Ext, vielleicht fehlt mir etwas Konfiguration bei den Modellassoziationen, ich weiß es nicht. Ich habe viel gegooglet, aber es fehlen Informationen über das verknüpfte Tagfield. Jede Hilfe wird dankbar geschätzt.