2012-03-16 10 views
5

Mam problem z uzyskaniem rzeczywistych danych do wyświetlenia na liście Sencha Touch 2. Lista powinna zostać wypełniona odpowiedzią JSONP i oczekuję pojawienia się dwóch wierszy. Zamiast tego otrzymuję jeden wiersz z "null at null".Sencha Touch 2 - pomoc dla proxy JSONP, szablon zawsze ma wartość null dla wartości

Oto adres, który zostaje wysłany:

http://some-server/data-fetcher.php?_dc=1331910031292&events=true&page=1&start=0 
    &limit=25&callback=Ext.data.JsonP.callback1 

Oto odpowiedź JSONP:

Ext.data.JsonP.callback1({"data":[{"id":"4","name":"Sample Name 1", 
    "description":null,"location":"Sample Location 1", 
    "start_time":"2012-03-22 00:00:00","end_time":null},{"id":"5", 
    "name":"Sample Name 2","description":null,"location":"Sample Location 2", 
    "start_time":"2012-03-31 00:00:00","end_time":null}],"num_rows":2}); 

Oto mój model:

Ext.define('MyApp.model.Event', { 
    extend: 'Ext.data.Model', 
    config : { 
     idProperty: 'id', 
     fields : [ { 
      name : "id", 
      type : "int" 
     }, { 
      name : "name", 
      type : "string" 
     }, { 
      name : "description", 
      type : "string" 
     }, { 
      name : "location", 
      type : "string" 
     }, { 
      name : "start_time", 
      type : "date" 
     }, { 
      name : "end_time", 
      type : "date" 
     } ] 
    } 
}); 

Oto mój sklep:

Ext.define('MyApp.store.EventsOnline', { 
    extend : 'Ext.data.Store', 
    requires: ['MyApp.model.Event'], 
    config : { 
     model : 'MyApp.model.Event', 
     autoLoad : true, 
     proxy : { 
      type : 'jsonp', 
      url : 'http://some-server/data-fetcher.php', 
      reader : { 
       type : 'json', 
       root : 'data', 
       totalCount : 'num_rows' 
      }, 
      callbackKey : 'callback', 
      extraParams : { 
       'events' : true 
      } 
     } 
    } 
}); 

Oto mój widok:

Ext.define('MyApp.view.Event', { 
    extend: 'Ext.Container', 
    config : { 
     layout : { 
      type : 'vbox', 
      align : 'stretch' 
     }, 
     fullscreen : true, 
     flex : 1, 
     items : [ 
      { 
       xtype : 'toolbar', 
       docked : 'top', 
       title : 'Events' 
      }, { 
       xtype : 'list', 
       flex : 1, 
       store : 'EventsOnline', 
       itemTpl : '{name} at {location}' 
      } 
     ] 
    } 
}); 

Czego spodziewać się w mojej liście jest:

Sample Name 1 at Sample Location 1 
Sample Name 2 at Sample Location 2 

I zamiast wszystko co widzę to:

null at null 

Co robię źle ?

Edit: jeśli to ma znaczenie, oto moja aplikacja i sterownik:

Ext.Loader.setConfig({enabled : true}); 

Ext.application({ 
    name    : 'MyApp', 
    appFolder   : 'app', 
    controllers : ['Home'], 
    launch : function() { 
     window[this.getName()].app = this; 
    } 
}); 

Ext.define('MyApp.controller.Home', { 
    extend: 'Ext.app.Controller', 
    models: ['Event'], 
    stores: ['EventsOnline'], 
    views: ['Event'], 
    init: function() { 
     var me = this; 
     Ext.Viewport.add(Ext.create('MyApp.view.Event')); 
    } 
}); 

Odpowiedz

3
root : 'data', 
totalCount : 'num_rows' 

jest przestarzała. Użyj:

rootProperty: 'data', 
totalProperty: 'num_rows' 

Upewnij się, że zawierasz Sencha Touch z sencha-touch-all-compat.js do rozwoju. Zgłasza w konsoli przeglądarki wszystkie przestarzałe rzeczy, z których korzystasz.

+0

Arrrrgh, to było to. Po tym jak cały dzień waliłem w głowę, w końcu przełączyłem się na jQuery Mobile, żeby sprawdzić, czy będę miał z tym więcej szczęścia. Sheesh, może wrócę do Sencha Touch 2 teraz. Wydaje się kulawy, że "przestarzałe" oznacza "całkowicie wyjęte". Znajduję wiele samouczków Sencha Touch w Internecie, które nie mają teraz zastosowania, ponieważ v2 ma przestarzałe/usunięte wiele. –

+1

Zmarnował jeden dzień, dzięki. Przejdź do tyłu kompatybilny! – SteveCav

0

Zmagałem się także, aby wyświetlić moją listę i przeszukać los na ten temat.

końcu dostałem odpowiedź po zmianie to moim zdaniem:

extend: 'Ext.Container', 

do

extend:'Ext.navigation.View', 

Dostałem powyższy pojęcia z przykładu link poniżej!

Sencha Touch 2: data intigration or how to share dynamic information between sencha and javascript

on teraz pracuje, szczęśliwy, aby zobaczyć mój pierwszy przykład MVC działa :)

Mam nadzieję, że komuś pomóc.

Powiązane problemy