Сенча Touch 2. Пустой список

Хранилище объекта загружается динамически через ajax-запрос. При отладке в консоли я вижу, что объект Store заполнен записями, но список пуст.

Код:

Вид из окна

Ext.define('sample.views.Viewport', {
    extend: 'Ext.tab.Panel',

    title:   'Hello world!',

    xtype: 'viewport',

    config: {
        fullscreen: true,

        tabBar: {
            docked: 'bottom',
        },

        items: [
            { xclass: 'sample.views.wares.lists.Popular' },
        ]
    }
});

Представление NavigationView

Ext.define('sample.view.wares.lists.Popular', {
    extend: 'Ext.NavigationView',

    xtype: 'Popular',

    config: {       
        iconCls: 'home',
        title: 'Pop. prekės',

        items: [
            {
                xtype: 'wares',                                                         
            }
        ]   
    }
});

Посмотреть список

Ext.define('sample.views.wares.lists.List', {
    extend: 'Ext.List',

    xtype: 'wares',

    config: {
        store: 'Wares', 
        itemTpl: '{Name}'
    },

    initialize: function () {
        this.config.title = sample.app.title;
    }
});    

Хранить объект записей, который был динамически загружен через Ajax-запрос.

Ext.define('sample.store.Wares', {
    extend: 'Ext.data.Store',

    config: {
        model: "sample.models.WaresListItem"
    }
});

Результат в эмуляторе пульсации

3 ответа

Решение
initialize: function () {
    this.config.title = sample.app.title;
    this.callParent();
}

"this.callParent()" важен, если у вас есть функция инициализации, потому что она вызывает parent (в вашем случае "Ext.dataview.List") и просит его выполнить определенные действия по умолчанию, которые должны быть созданы для List. Это похоже на вызов super из конструктора в Java.

Если вы можете переместить это в блок объявления

this.config.title = sample.app.title;

и делай так

config: {
    store: 'Wares', 
    itemTpl: '{Name}',
    title: sample.app.title
},

вам не нужно инициализировать блок вообще

В большинстве случаев вы не видите внутренний компонент, потому что вы не определили макет его контейнера.

Попробуйте добавить макет в конфигурацию вашего вида навигации, как показано ниже:

config: {       
    iconCls: 'home',
    title: 'Pop. prekės',
    layout: 'fit',
    items: [
        {
            xtype: 'wares',                                                         
        }
    ]   
}

Надеюсь это поможет

См. Также: Ответ Р.Дугана здесь: Как сделать список dataview.list видимым в Sencha Touch 2?

Несколько раз рассматривал образец заявки в официальной документации и проблема была решена по телефону callParent функция в initialize функция. Пока не знаю почему.

initialize: function () {
    this.config.title = sample.app.title;
    this.callParent();
}
Другие вопросы по тегам