Ext.dispatch из слушателя itemTap? - PullRequest
1 голос
/ 13 июля 2011

На аналогичный вопрос ответили здесь: Как добавить itemtap

Но когда я пытаюсь переместить мой код Ext.dispatch() с onItemDisclosure: на listeners: {itemtap:}, он не работает.

Ext.dispatch изначально жил здесь:

    onItemDisclosure: {
        scope: this,
        handler: function (record) {
            // Call the controller's "show" action
            Ext.dispatch({
                controller: myApp.controllers.products,
                action: 'show',
                id: record.getId()
            });
        }
    }

Но теперь я хочу, чтобы он жил здесь (чтобы убрать кнопку раскрытия и сделать выбор всей строки):

    listeners: {
        scope: this,
        itemTap: function (record) {
            alert('!!!');
            // Call the controller's "show" action
            Ext.dispatch({
                controller: myApp.controllers.products,
                action: 'show',
                id: record.getId()
            });
        }
    }

EDIT: Функция в приемнике itemTap: вызывается (отображается предупреждение), но действие 'show' не вызывается в контроллере, как это происходит, когда Ext.dispatch жил в onItemDisclosure:.

1 Ответ

2 голосов
/ 14 июля 2011

при условии, что вы делаете это внутри списка, как и в другом вопросе, событию itemtap передается 4 аргумента: Ext.DataView this, Number index, Ext.Element item, Ext.EventObject e.

так что вы хотите сделать что-то вроде

itemtap: function(dataView, index, item, e) {
    Ext.dispatch({
            controller: myApp.controllers.products,
            action: 'show',
            id: index
        });
}

Предполагается, что getId () просто дает вам индекс записи. Если он дает вам что-то еще, вы можете получить сам объект записи, выполнив

dataView.getStore().getAt(index) /* .getId() */

надеюсь, что это поможет.

...