2014-12-16 4 views
3

Мне нужна помощь с моей xtemplate и хранить с прокси. Независимо от того, что я пытаюсь, я застрял в этой проблеме. В xtemplate отображаются только данные из магазина без использования прокси.Extjs 5 XTemplate с данными магазина JSON

работы магазина:

Ext.create('Ext.data.Store', { 
    storeId : 'viewStore', 
    model : 'dataview_model', 
    data : [ 
     {statistic: '213213', description: 'Hallo'}, 
     {statistic: '534345', description: 'Alloh'}, 
    ] 
}); 

Рабочая XTemplate и конфигурации данных

xtype: 'component', 
    cls: 'kpi-tiles', 
    id: 'statisticsBoxes', 
    height: 100, 

    tpl: [ 
     '<div class="kpi-meta">', 
      '<tpl for=".">', 
       '<span>', 
        '<div class="statsDiv">{statistic}</div> {description}', 
       '</span>', 
      '</tpl>', 
     '</div>' 
    ], 

    data: [{ 
     description: Ext.getStore('statisticsStore').getAt(0).data.statistic, 
     statistic: Ext.getStore('viewStore').getAt(0).data.statistic 
    },{ 
     description: Ext.getStore('viewStore').getAt(1).data.description, 
     statistic: Ext.getStore('viewStore').getAt(1).data.statistic 
    }], 

Но когда я меняю данные для шаблона, так она будет загружать данные из хранилища статистики, возникает следующая ошибка в console.log: Uncaught TypeError: Невозможно прочитать свойство getAt неопределенного.

конфигурации данных:

data: [{ 
    description: 'the description', 
    statistic: Ext.getStore('statisticsStore').getAt(0).data.statistic 
}], 

Статистика магазин:

Ext.define('ExecDashboard.store.Statistics', { 
extend: 'Ext.data.Store', 
alias: 'store.statistics', 
storeId: 'statisticsStore', 
model: 'ExecDashboard.model.Statistics', 

proxy: {  
    type: 'ajax', 
    url: '/statistics', 
    reader: 'json' 
} 
}); 

производит следующие JSON:
[{ "Статистика": "1"}, { "статистика": "2" }]

магазин загружается в ViewModel:

stores: { 
    Statistics: { 
     type: 'statistics', 
     autoLoad: true 
    } 
} 

Я думаю, проблема в том, что магазин не загружен в этот момент. Но я не знаю, как решить эту проблему. Я знаю, что «Ext.getStore (« статистикаStore »). GetAt (0) .data.statistic» работает в console.log при загрузке магазина.

+0

так, как это магазин загружен? – dbrin

+0

магазин загружен в viewModel – Jurgen

+0

Я думаю, что ваша догадка о сроках правильная, вам нужно настроить слушателя на событие загрузки магазина и отключить свою другую логику, когда загрузка будет завершена. – dbrin

ответ

0

Возможно, вам необходимо установить autoLoad: true в свой магазин.

+0

Магазин загружен в viewModel и autoLoad is true – Jurgen

-1

Слушатель событий в магазине в моем представленииModel решает проблему.

Statistics: { 
     type: 'statistics', 
     autoLoad: true, 
     listeners: { 
      load: function(){ 
       var data = [{"description": "New", "statistic" : this.data.items[0].data.statistic}]; 
       Ext.getCmp('statisticsBoxes').update(data);    
      } 
     } 
    } 

Когда магазин загружен, то событие будет срабатывать, который обновляет XTemplate с новыми данными

1

Используйте Ext.view.View, что это именно то, что класс для:

xtype: 'dataview', 
cls: 'kpi-tiles kpi-meta', 
id: 'statisticsBoxes', 
height: 100, 
itemSelector: '.statsDiv', 
tpl: [ 
    '<tpl for=".">', 
     '<span>', 
      '<div class="statsDiv">{statistic}</div> {description}', 
     '</span>' 
    '</tpl>' 
], 
store: 'statisticsStore' 
+0

Спасибо, я дам ему попробовать. Я уже пробовал что-то подобное, но без рабочего результата. – Jurgen

Смежные вопросы