Зацикливание при использовании 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, время: 09:10. |