2016-03-26 6 views
0

Когда я вызвать функцию из контроллера, который загружает данные в хранилище следующим образом,ExtJs getTotalCount() не возвращает количество записей в магазине

var store= new Ext.getStore('MyStore'); 
store.load();  

Заголовок ответа показывает, что следующие данные в формате JSON возвращается,

{"usrdata":[{"name":"John", 
      "roll":"5", 
      "address":"abcd" 
      }] 
} 

, но проблема в том, когда я пишу

console.log(store.getTotalCount()); 

это показывает «0 '(ноль) на консоли.

Может кто-нибудь, пожалуйста, помогите мне определить, почему это не показывает фактический подсчет количества записей в магазине.

Я чувствую, что это может быть потому, что магазин не закончил загрузку при вызове функции (может быть, я не прав).

Ниже приведен код моего магазина:

Ext.define('MyApp.store.MyStore', { 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.MyModel', 

    timeout : 60000, 
    proxy: { 
     type: 'ajax', 
     api: { 
      create: 'php/insert.php', 
      read: 'php/read.php', 
      update: 'php/update.php', 
      destroy: 'php/delete.php', 
     }, 
     reader: { 
      type: 'json', 
      root: 'usrdata', 
      successProperty: 'success' 
     }, 
     writer: { 
      type: 'json', 
      writeAllFields: true, 
      encode: true, 
      root: 'usrdata' 
     } 
    }, 
    autoLoad: true, 
}); 
+1

это наиболее вероятное Причина. Я чувствую, что это может быть из-за того, что магазин не закончил загрузку при вызове функции. – Cyril

ответ

0

Вы должны незначительные изменения в вашем определении магазине

Ext.define('MyApp.store.MyStore', { 
 
    extend: 'Ext.data.Store', 
 
    model: 'MyApp.model.MyModel', 
 

 
    timeout : 60000, 
 
    proxy: { 
 
     type: 'ajax', 
 
     api: { 
 
      create: 'php/insert.php', 
 
      read: 'php/read.php', 
 
      update: 'php/update.php', 
 
      destroy: 'php/delete.php', 
 
     }, 
 
     reader: { 
 
      type: 'json', 
 
      root: 'usrdata', 
 
      totalProperty : '<the_node_of_json_response_which_holds_the_count>' 
 
      successProperty: 'success' 
 
     }, 
 
     writer: { 
 
      type: 'json', 
 
      writeAllFields: true, 
 
      encode: true, 
 
      root: 'usrdata' 
 
     } 
 
    }, 
 
    autoLoad: true, 
 
});

PS - ваша служба должна вернуть счетчик. getTotalCount() не возвращает количество записей, хранящихся в вашем хранилище, и возвращает число, которое имеет свойство totalProperty объекта reader.

Так что, если ваша служба возвращает данные -

{ 
 
    "total": 122, 
 
    "offset": 0, 
 
    "users": [ 
 
     { 
 
      "id": "ed-spencer-1", 
 
      "value": 1, 
 
      "user": { 
 
       "id": 1, 
 
       "name": "Ed Spencer", 
 
       "email": "[email protected]" 
 
      } 
 
     } 
 
    ] 
 
}

ваш объект читатель будет выглядеть -

reader: { 
 
       type: 'json', 
 
       root: 'usrdata', 
 
       totalProperty : 'total' 
 
       successProperty: 'success' 
 
      },

1

Используйте функцию обратного вызова в методе загрузки, чтобы получить количество записей: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.data.Store-method-load

store.load({ 
    scope: this, 
    callback: function(records, operation, success) { 
     // the operation object 
     // contains all of the details of the load operation 
     console.log(records.length); 
     // Alternative 
     console.log(store.getTotalCount()); 
    } 
}); 
+0

Спасибо большое, Тир, это сработало. –

0

Только в случае, если мы решаем неправильную проблему. Обычно вам нужно, чтобы полный счетчик всегда возвращался с сервера по вашим данным, таким образом, разбиение на страницы и т. Д. Все будет работать автоматически. См here примеры:

{ 
    "total": 122, 
    "offset": 0, 
    "users": [ 
     { 
      "id": "ed-spencer-1", 
      "value": 1, 
      "user": { 
       "id": 1, 
       "name": "Ed Spencer", 
       "email": "[email protected]" 
      } 
     } 
    ] 
} 
Смежные вопросы