2011-06-11 13 views
7

Tengo una lista de contactos que sencha touch muestra en una lista. Luego, cuando haga clic en un nombre en la lista, debería deslizarse hacia la derecha y decir ¡Hola, {nombre de contacto}! pero cuando se desliza en este momento, simplemente dice "¡Hola!" en la línea 29 es donde está ocurriendo la acción para el elemento toque, creo que el problema está aquí. Simplemente no sé cómo formatearlo correctamente. A continuación está mi código fuente.Sencha Touch itemtap

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] 
    }); 

} 

});

Respuesta

11

El primer argumento pasado al evento itemtap no es el registro del elemento List invocado, sino el DataView.

A partir de los documentos:

itemtap: (Ext.DataView esto, índice de número, elemento Ext.Element, Ext.EventObject e) Se activa cuando un nodo se dio un golpecito en

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 

se puede agarrar el registro aprovechado mediante el uso de:

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

Estoy aprendiendo sencha touch lo que es el objeto de vista de datos, el índice del elemento que se tapó, el elemento de elemento y el objeto de evento. Además, ¿cómo es dataView el 1er argumento e 'índice' el 2do? Gracias por tu ayuda. – Alex

+0

Una lista hereda de un DataView y el evento 'itemtap' es uno que se hereda de la clase base de DataView. La documentación por lo tanto es un poco confusa cuando se usa una lista. El primer argumento del controlador de eventos contiene una referencia a su instancia de List (equivalente a la variable 'ListDemo.listPanel' en su ejemplo). El argumento 'índice' se refiere al lugar en la Lista que el elemento golpeado cae, p. El primer elemento de lista tocado da el índice = 0, el segundo elemento tocado da el índice = 1 etc. Para los casos de uso simple puede ignorar el elemento y los argumentos e - además, me estoy quedando sin espacio ... :) – Stuart

+0

Esto parece estar roto cuando trabajando con listas agrupadas. – Art

9
itemtap: function(view, index, item, e) { 
    var rec = view.getStore().getAt(index); 
    ListDemo.detailPanel.update(rec.data); 
} 

Así es como lo hice funcionar.

+2

Esto parece estar roto cuando se trabaja con listas agrupadas. – Art

+1

Tenga en cuenta que en Sencha Touch 2, el método de actualización ahora es setData() – cyberwombat