Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2018, 20:30
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Зацикливание при использовании 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;
                }
            }
        },
...

Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2018, 09:31
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

а что есть this.getStore() в renderer? если это стор который показывает грид ..то какбы всё очевидно грид пытается показать запись -> мы перезагружаем его стор -> грид пытается показать запись -> мы перезагружаем его стор -> ...
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2018, 15:45
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Поясните, пож-та, в 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;
                }
            }
        },
....


Если так, то как корректно получить стор и проверить что он загружен?

Последний раз редактировалось Ambassador, 02.10.2018 в 15:49.
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2018, 20:27
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

вы не проверяете загружен ли стор вы его загружаете: https://docs.sencha.com/extjs/6.5.3/...ml#method-load

для проверки есть метод: https://docs.sencha.com/extjs/6.5.3/...ethod-isLoaded

но этого в любом случае в renderer-е делать не надо. renderer вызывается на каждую запись из стора. и если уж он вызвался значит как минимум одна запись в сторе есть и он пытается её отрисовать для колонки.
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2018, 19:23
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Здравствуйте.
В 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
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2018, 21:28
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

я все еще не понимаю зачем при показе каждой записи этого грида делать перезагрузку одного и того же стора store_ca

если это у вас справочник контрагентов почему вы его просто не загружаете 1 раз?

https://fiddle.sencha.com/#view/editor&fiddle/2mlc
Ответить с цитированием
  #7 (permalink)  
Старый 25.10.2018, 11:28
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Сообщение от siber-biber Посмотреть сообщение
я все еще не понимаю зачем при показе каждой записи этого грида делать перезагрузку одного и того же стора store_ca

если это у вас справочник контрагентов почему вы его просто не загружаете 1 раз?

https://fiddle.sencha.com/#view/editor&fiddle/2mlc
Взял за основу не правильный пример.
Спасибо большое за помощь, вы мне очень помогли!
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы совместимости при использовании ExtJS в браузерах IE & Opera Allan Stark ExtJS 4 18.09.2012 10:28
Подружить два скрипта (скроллер+скрипт эффекта при наведении) Che jQuery 26 29.08.2012 10:59
getAllResponseHeaders() и status имеют смысл только при readyState==4? mister_maxim AJAX и COMET 7 27.03.2011 19:08
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Ссылка на объект при использовании attachEvent Octane Events/DOM/Window 13 23.07.2008 17:37