Ext.data.JsonStore getCount () возвращает 0 записей веб-службы - PullRequest
1 голос
/ 15 апреля 2011

Я работаю над приложением Sencha Touch и не могу получить данные из своего веб-сервиса.

Следующий код работал для другого пользователя на форумах sencha , стр. 4. Iизменил его так, чтобы он соответствовал выводу моих веб-служб json.

var myStore = new Ext.data.JsonStore({
        id: 'Agents',
        proxy: new Ext.data.HttpProxy({
            url: 'ws/Service.asmx/GetAgents'
            ,method: 'post'
            ,jsonData: {}
            ,headers: { 'Content-Type': 'application/json; charset=utf-8;'}
            ,reader:{root:'d', record:'rows'}
        }),
        totalProperty: 'd.totalRows',
        idProperty: 'AgentID',
        fields: ['AgentID', 'FirstName','LastName'],
        autoLoad:'true',
        listeners: {
                beforeload: function(myStore, options) {
                    console.log('beforeload: myStore.count = ' + myStore.getCount());
                    console.log(options);
                },
                load: function(myStore, records, options) {
                    console.log('load: ' + myStore.getCount());
                    console.log(records)
                    console.log(options);
                },
                exception: function(misc) {
                    console.log('exception:');
                    console.log(misc);
                }
            }
});

Вывод консоли Firebug:

beforeload: myStore.count = 0
load: 0
[]
true

Firebug подтверждает, что JSON, возвращенный из 'ws / Service.asmx / GetAgents':

{"d":{"success":true,"totalRows":2,"rows":[{"AgentID":1,"FirstName":"Jelena","LastName":"Akerhus"},{"AgentID":2,"FirstName":"Londo","LastName":"Molari"}]}}

Однако, когда я набираю 'myStore.getCount ()' в консоли, я получаю 0 записей.

Вот часть кода для Service.asmx:

[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
    public object GetAgents()
    {
        List<Agent> agents = new List<Agent>();
        agents.Add( new Agent(1, "Jelena", "Akerhus") );
        agents.Add( new Agent(2, "Londo", "Molari") );

        object data = new { success = true, totalRows = agents.Count, rows = agents };
        return data;

    }
}

1 Ответ

0 голосов
/ 15 апреля 2011

Это сработало для меня, я зарегистрировал модель отдельно, но с типами данных.Я использую магазин с JsonReader, я удалил некоторые дополнительные вещи, которые вы добавили. Надеюсь, это работает для вас ...

      Ext.regModel('Agent', {
        idProperty:'AgentID',
        fields: [{name:'AgentID', type:'int'},{name:'FirstName', type:'string'},{name:'LastName', type:'string'}]
      });

      var store = new Ext.data.Store({
        model  : 'Agent',
        proxy: 
        {
           type:'ajax',
           url:'test.json',
           reader:{
             type:'json',
             root:'d.rows',
             totalProperty: 'd.totalRows'
           }
        },
        autoLoad:'true'
      });

      var list = new Ext.List({
        fullscreen: true,
        itemTpl : '{FirstName} {LastName}',
        store: store
      });
      list.show();
...