Рассмотрим следующую модель представления, которая используется в
Ext.define('TestApp.view.event.UserSelectionModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.userselection',
data: {
storeFilter: ['org'],
onAddUser: function(btn, eOps) {
//update 'storeFilter' array here
},
},
onAddOrganization_btn: function(obj, eOps) {
debugger;
},
stores: {
organization: {
type: 'organization',
deep: true,
},
filteredorganization: {
type: 'organization',
filters: [{
property: 'name',
operator: 'in',
value: '{storeFilter}',
}]
}
},
});
Хранилище используется сеткой, в то время как под этой сеткой существует кнопка, которая связывает свой обработчик с кнопкой onAddUser
.
{
xtype: 'button',
name: 'event_add_button',
bind: {
handler: '{onAddUser}'
},
text: '<strong>Add</strong>',
}
Проблема в том, что функция onAddUser
вызывается с точки зрения вида (кнопка), this
не установлена на модель вида.Если я пытаюсь явно связать this
per:
Ext.define('TestApp.view.event.UserSelectionModel', {
...
onAddUser: function(btn, eOps) {
//update 'storeFilter' array here
}.bind(this),
Это также не модель представления, она установлена в глобальный класс окна.Третий вариант, чтобы вручную получить видовую модель из кнопки, просто добавив следующее:
Ext.define('TestApp.view.event.UserSelectionModel', {
...
onAddUser: function(btn, eOps) {
//update 'storeFilter' array here
const vm = this.getViewModel();
},
Показывает vm
, являющийся null
: что не является неожиданным, так как видовая модель не установлена непосредственно накнопка, скорее она установлена на одном из родительских представлений.Цель состоит в том, чтобы обновить фильтр путем добавления / удаления имен из массива storeFilter
, что затем должно обновить вид сетки.