从itemTap监听器中的Ext.dispatch?

时间:2011-07-13 18:53:12

标签: javascript sencha-touch extjs

这里回答了类似的问题:How to add 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()
            });
        }
    }

修改 调用itemTap:侦听器中的函数(显示警报),但控制器中不会调用'show'操作,因为Ext.dispatch存在于onItemDisclosure:内}。

1 个答案:

答案 0 :(得分:2)

假设你在另一个问题中在列表中执行此操作,则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() */
希望有所帮助。