Ext.List показывает только 1 значение вместо всех

#sencha-touch #extjs

#sencha-touch #extjs

Вопрос:

я использую AJAX-запрос для получения значения с сервера в формате JSON. но когда я пытаюсь показать это в Ext.В списке отображается только 1 значение вместо всех.

 Ext.setup({
onReady: function() {

    Ext.regModel('Contact', {
        fields: ['firstName', 'lastName']
    });
            var posts;
            var count;
            var name = 'sdf';
      Ext.Ajax.request({
                    url: 'a.php/pool/listPools',
                    method: 'post',
                    type:'json',
                    success: function(response){
                          posts = Ext.decode(response.responseText);
                          alert(response.responseText);
                          count = posts.count;
                          for (var i = 0; i < count; i  ) {
                          name = posts.data[i].name;
                          alert(name);
                          var btnContact = new Ext.TabPanel({
        fullscreen: true,
        items: [ new Ext.List({
                            itemTpl:'',
            title: 'My Tab',
            tpl: '<tpl for="."><div class="contact"><strong>{firstName}</strong> {lastName}</div></tpl>',
            itemSelector: 'div.contact',
            singleSelect: true,
            grouped: true,
            indexBar: false,


            store: new Ext.data.JsonStore({
                model: 'Contact',
                sorters: 'firstName',

                getGroupString: function (record) {
                  return record.get('firstName');
                },
                data:  [
                    {
                                                firstName: name,
                                                lastName: ''
                                            }
                ]
            })
        }), 
                     //{ title: 'Tab 2' } 
                ]   
                    });

                }}               
            });

}
  

});

Ооочень мой вопрос в том, как я могу показать все извлеченные данные? вместо всего 1?

Ответ №1:

Вы создаете свою панель вкладок внутри цикла for, который создает одну панель вкладок для каждого элемента массива, причем каждая панель вкладок имеет список, привязанный к хранилищу с одной записью. Все они расположены друг над другом, поэтому вы видите только одно за раз.

Чтобы это работало быстро, я бы вынес ваше создание TabPanel за пределы цикла for и создал в нем ваш набор данных:

 var dataArray = [];
for (var i = 0; i < count; i  ) {
   name = posts.data[i].name;

   dataArray.push({
                   firstName: name,
                   lastName: ''
              });
}
  

Затем вы можете передать этот массив данных в свое хранилище:

 new Ext.data.JsonStore({
            model: 'Contact',
            sorters: 'firstName',

            getGroupString: function (record) {
              return record.get('firstName');
            },
            data:  dataArray
        })
  

Однако я бы посоветовал вам изучить, как заставить ваши хранилища загружать эти данные самостоятельно (через прокси), поскольку это лучший способ сделать это.

Стюарт