Sencha Touch itemtap

Posted

技术标签:

【中文标题】Sencha Touch itemtap【英文标题】: 【发布时间】:2011-06-11 20:32:35 【问题描述】:

我有一份 sencha touch 在列表中显示的联系人列表。然后,当您单击列表中的姓名时,它应该向右滑动并说 Hello contact name!但是当它现在滑过时,它只是说你好!在第 29 行是 item tap 的动作发生的地方,我相信问题就在这里。我只是不知道如何正确格式化它。下面是我的源代码。

ListDemo = new Ext.Application(
name: "ListDemo",

launch: function() 

    ListDemo.detailPanel = new Ext.Panel(
        id: 'detailpanel',
        tpl: 'Hello, firstName!',
        dockedItems: [
            
                xtype: 'toolbar',
                items: [
                    text: 'back',
                    ui: 'back',
                    handler: function() 
                        ListDemo.Viewport.setActiveItem('disclosurelist', type:'slide', direction:'right');
                    
                ]
            
        ]
    );

    ListDemo.listPanel = new Ext.List(
        id: 'disclosurelist',
        store: ListDemo.ListStore,
        itemTpl: '<div class="contact">firstName lastName</div>',

        listeners:
            itemtap: function(record, index)               
            ListDemo.detailPanel.update(record.data);
            ListDemo.Viewport.setActiveItem('detailpanel');
            
        
    );

    ListDemo.Viewport = new Ext.Panel (
        fullscreen: true,
        layout: 'card',
        cardSwitchAnimation: 'slide',
        items: [ListDemo.listPanel, ListDemo.detailPanel]
    );


);

【问题讨论】:

【参考方案1】:

传递给 itemtap 事件的第一个参数不是被点击的 List 项的记录,而是 DataView 本身。

来自文档:

itemtap : ( Ext.DataView this, Number index, Ext.Element item, 分机事件对象 e) 当一个节点被点击时触发

Listeners will be called with the following arguments:
this : Ext.DataView
    The DataView object
index : Number
    The index of the item that was tapped
item : Ext.Element
    The item element
e : Ext.EventObject
    The event object

您可以使用以下方法获取点击的记录:

dataView.store.getAt(index); // where 'dataView' is 1st argument and 'index' the 2nd

【讨论】:

我只是在学习 sencha touch 什么是 dataview 对象、被点击的项目的索引、项目元素和事件对象。此外,dataView 的第一个参数和“索引”的第二个参数如何。感谢您的帮助。 List 继承自 DataView,而 'itemtap' 事件是继承自 DataView 基类的事件。因此,在使用列表时,文档有点混乱。事件处理程序的第一个参数包含对您的 List 实例的引用(相当于您示例中的变量“ListDemo.listPanel”)。 'index' 参数指的是列表中被点击的项目所在的位置,例如点击的第一个列表项给出 index = 0,点击的第二个项目给出 index = 1 等。对于简单的用例,您可以忽略 item 和 e 参数 - 加上我的空间不足.. :)【参考方案2】:
itemtap: function(view, index, item, e) 
    var rec = view.getStore().getAt(index);
    ListDemo.detailPanel.update(rec.data);

这就是我让它工作的方式。

【讨论】:

请注意,在 Sencha Touch 2 中,更新方法现在是 setData()

以上是关于Sencha Touch itemtap的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch - sencha touch js 大小的性能问题

将 Sencha Architect 项目从 Sencha Touch v2.0.x 更新到 Sencha Touch 2.1.x

iPhone Sencha Touch - 如何在 sencha touch 中将表格视图添加到拆分视图

将 Sencha Touch 1.X 升级到 Sencha Touch 2.X

有没有办法将 Sencha Touch 转换为 Sencha EXTJ(或将 EXTJ 转换为 Touch)?

sencha touch Uncaught TypeError: Cannot read property 'isReady' of undefined sencha-touch-all.js:21