Вы пытаетесь запросить хранилище, прежде чем его данные будут заполнены.Вы хотите избежать загрузки хранилища при каждом запуске события рендеринга.
Функция Ext.data.Store-> load асинхронная
См. docs
store.load({
scope: this,
callback: function(records, operation, success) {
// the operation object
// contains all of the details of the load operation
console.log(records);
}
});
Измените свою реализацию на эту и проверьте, работает ли она
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
store_ca = Ext.data.StoreManager.get('ContrAgents');
if (record.data.contragent != ''){
store_ca.load(function(records, operation, success) {
console.log('loaded records');
var contr = store_ca.getById(record.data.contragent);
indexInStore = store_ca.findExact('id', value);
console.log({
contr: contr,
indexInStore: indexInStore
});
});
// Not sure what you are trying to return here
// return contr.data.name;
}
}
Пример удаленного комбинирования в ExtJS Grid
Я нашел хороший пример того, чего вы пытаетесь достичь с помощью выпадающего списка в сетке с удаленным магазином, посмотрите этот пост (возможно, вам придется зарегистрироваться бесплатно, но решение того стоит иЗдесь я не буду заниматься плагиатом)
Сетка с комбинированным виджетом редактирования с привязкой
Возможно, это может помочь ...
Ext.define('Fiddle.view.ListView' ,{
extend: 'Ext.grid.Panel',
alias: 'widget.booklist',
itemId: 'BookList',
store: 'ListViewStore',
xtype: 'listview',
plugins: ['cellediting','gridfilters'],
initComponent: function() {
this.columns = [
{
header: 'ID',
dataIndex: 'id',
sortable: true,
width: 35
},
{
text: 'Контрагент',
width: 150,
xtype: 'widgetcolumn',
dataIndex: 'contragent',
widget: {
xtype: 'combo',
bind: '{record.contragent}',
allowBlank: false,
displayField: 'name',
valueField: 'id',
store: Ext.data.StoreManager.lookup('ContrAgents')
}
}
];
this.callParent(arguments);
}
});