Зацикливание при использовании this.getStore().load()
Приветствую.
Ребят, подскажите почему происходит зацикливание когда использую в рендере this.getStore().load() ? А так же почему каждое значение index_record у меня -1, при том что я точно уверен что store_ca содержит запись с id == 1
...
{
xtype: 'gridcolumn',
text: 'Контрагент',
dataIndex: 'contragent',
editor: {
xtype: 'combobox',
allowBlank: false,
displayField: 'name',
valueField: 'id',
queryMode: 'remote',
store: Ext.data.StoreManager.lookup('ContrAgents')
},
renderer: function(value, metaData, record, rowIndex, colIndex, store, view){
if(this.getStore().load()){
store_ca = Ext.data.StoreManager.lookup('ContrAgents');
index_record = store_ca.findExact('id', 1);
}
if(index_record != -1){
rs = store_ca.getAt(index_record).data;
return rs.name;
}
}
},
...
Заранее спасибо |
а что есть this.getStore() в renderer? если это стор который показывает грид ..то какбы всё очевидно грид пытается показать запись -> мы перезагружаем его стор -> грид пытается показать запись -> мы перезагружаем его стор -> ...
|
Поясните, пож-та, в this.getStore() будет находиться тот стор который я указываю при определении класса:
store: 'BookStore'?
Ext.define('BookApp.view.BookList' ,{
extend: 'Ext.grid.Panel',
alias: 'widget.booklist',
itemId: 'BookList',
title: 'Операции',
store: 'BookStore',
...
initComponent: function() {
this.columns = [
{
xtype: 'gridcolumn',
text: 'Контрагент',
dataIndex: 'contragent',
editor: {
xtype: 'combobox',
allowBlank: false,
displayField: 'name',
valueField: 'id',
queryMode: 'remote',
store: Ext.data.StoreManager.lookup('ContrAgents')
},
renderer: function(value, metaData, record, rowIndex, colIndex, store, view){
if(this.getStore().load()){
store_ca = Ext.data.StoreManager.lookup('ContrAgents');
index_record = store_ca.findExact('id', 1);
}
if(index_record != -1){
rs = store_ca.getAt(index_record).data;
return rs.name;
}
}
},
....
Если так, то как корректно получить стор и проверить что он загружен? |
вы не проверяете загружен ли стор вы его загружаете: https://docs.sencha.com/extjs/6.5.3/...ml#method-load
для проверки есть метод: https://docs.sencha.com/extjs/6.5.3/...ethod-isLoaded но этого в любом случае в renderer-е делать не надо. renderer вызывается на каждую запись из стора. и если уж он вызвался значит как минимум одна запись в сторе есть и он пытается её отрисовать для колонки. |
Здравствуйте.
В renderer я загружаю стор с функцией обратного вызова и в ней переменная contr только с последним значением записи стора ContrAgents.
{
xtype: 'gridcolumn',
text: 'Контрагент',
dataIndex: 'contragent',
editor: {
xtype: 'combobox',
allowBlank: false,
displayField:'name',
valueField:'id',
queryMode:'remote',
store: Ext.data.StoreManager.lookup('ContrAgents')
},
renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
store_ca = Ext.data.StoreManager.get('ContrAgents');
//console.log(store_ca)
if (record.data.contragent != ''){
var datafield = store_ca.load(function(records, operation, success) {
var contr = store_ca.getById(record.data.contragent);
indexInStore = store_ca.findExact('id', value);
console.log(contr);
});
}
}
}
Как правильно вернуть 'name' установленных записей? Для наглядности создал пример со своей проблемой в fiddle |
я все еще не понимаю зачем при показе каждой записи этого грида делать перезагрузку одного и того же стора store_ca
если это у вас справочник контрагентов почему вы его просто не загружаете 1 раз? https://fiddle.sencha.com/#view/editor&fiddle/2mlc |
Цитата:
Спасибо большое за помощь, вы мне очень помогли! |
| Часовой пояс GMT +3, время: 12:13. |