Привязать обработчик кнопки и обратиться к viewmodel в этой функции обработчика - PullRequest
0 голосов
/ 08 октября 2018

Рассмотрим следующую модель представления, которая используется в

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, что затем должно обновить вид сетки.

...