Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2014, 19:25
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

сервер и radiogroup
При загрузке формы с сервера не могу проставить радиоточку. Форма загружена в tab panel. Собственно по примеру кода всё будет ясно:

var chxs = {columnWidth: .25,
    layout: 'form',
    labelAlign: 'top',
    items: [
        {
        xtype: 'radiogroup',
        fieldLabel: 'Техническое обоснование формировать',
        items: [
            {
            boxLabel: 'приложение',
            name: 'p0442_c06',
            inputValue: 1
            },
            {
            boxLabel: 'оборотная сторона',
            id: 'gf',
            name: 'p0442_c06',
            inputValue: 0
            }
        ]
    }]
};

    panel2 = new Ext.FormPanel({
        frame: true,
        layout: 'form',
        title: "<span id=tehob >Техническое обоснование",
	autoWidth: document.body.clientWidth*0.9, height: document.body.clientHeight*0.9,
	id: 'tehobId',
/*----------------------------------------------------------------------------*/
    url: 'phps/mm160c06_load.php',
    reader: new Ext.data.JsonReader({
    	root: 'dan',
    	totalProperty: 'total',
	id: "id1"
	}, [
	'p0442_c06'
	]
    ),
    writer: new Ext.data.JsonWriter({
        encode: true,
        writeAllFields: true
    }),
    items: [
    {
        bodyStyle: {
            margin: '0px 0px 5px 0px'
        },
        hideBorders: true,
        items:[{
            hideBorders: true,
            layout: 'column',
            items: [chxs]
        }]
    }]
	listeners: { 
            'actioncomplete': { fn: function(form, action){
            var p044_chk=document.getElementsByName('p0442_c06');
            if (action.type=='load'){
                    if (action.result.data.p0442_c06==1){ // РЕЗУЛЬТАТ С СЕРВЕРА
                        var p044_chk=document.getElementsByName('p0442_c06'); // НЕ НАХОДИТ!! НО! - ЕСЛИ СДЕЛАТЬ SETTIMEOUT, ТО ВСЁ РАБОТАЕТ. ИЛИ ЕСЛИ СДЕЛАТЬ ВМЕСТО ACTIONCOMPLETE - AFTERLAYOUT, ВСЁ РАБОТАЕТ. ПРАВДА НЕ ВИДИТ ОТВЕТ С СЕРВЕРА.....(action.result.data.p0442_c06)
                                document.getElementsByName('p0442_c06')[0].checked=true;
                    }else{
                                document.getElementsByName('p0442_c06')[1].checked=true;
                    }
            }
            }, scope: this, single: true }
	}
    });



panel2.load({
    method: 'post', params: {c155: c155}
});
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2014, 19:11
Интересующийся
Отправить личное сообщение для Raydezm Посмотреть профиль Найти все сообщения от Raydezm
 
Регистрация: 01.12.2013
Сообщений: 26

Очень хороший совет - не используйте нативные getElementsByName и прочее.
http://docs.sencha.com/extjs/4.2.2/#...ComponentQuery
Ну или под любую другую версию, отличий почти нет.
Или методы down и up, например panel2.down('[name="p0442_c06"]').

Второй совет, который спасет вас от багов асинхронной загрузки и вообще сделает жизнь теплее и мягче - не используйте new.
Вместо этого используйте Ext.create().

А вот метод который установит значение для ваших радиокнопок - http://docs.sencha.com/extjs/4.2.2/#...ethod-setValue

Попробуйте использовать эти советы и напишите если не получится.
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2014, 20:18
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Спасибо за дельные советы!

Наверное эта Сенча мне не поможет - виноват, не уточнил: мы используем 3 версию Экста. А в сравнении с четвёртой там есть различия.

Сообщение от Raydezm Посмотреть сообщение
А вот метод который установит значение для ваших радиокнопок - http://docs.sencha.com/extjs/4.2.2/#...ethod-setValue
Вы мне советуете использовать setValue...но проблема ни в этом. Проблема в том, что я не могу найти радиокнопку! Точнее, я её могу найти, используя setTimeout и поставив 5000, например. Документ загрузится и всё хорошо. Но это же ни есть хорошо, ибо время ответа с сервера всегда разное и документ грузится с разной скоростью....

Ещё можно найти радиокнопку, используя в listeners событие afterlayout. Но тогда я не могу знать что пришло с сервера! То есть проверку if (action.result.data.p0442_c06==1) - сделать не удастся.
Но кнопка проставится правда.....

Как же быть? Второй день ничего путного не придумаю.
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2014, 23:18
Интересующийся
Отправить личное сообщение для Raydezm Посмотреть профиль Найти все сообщения от Raydezm
 
Регистрация: 01.12.2013
Сообщений: 26

Создать новое поле в классе, записать туда пришедшие данные, на afterlayout прочитать их и действовать по необходимой логике.

Что-то вроде

this.lastAction = action.type

, а потом в afterlayout

if (this.lastAction == 'load'){ ...

Последний раз редактировалось Raydezm, 08.08.2014 в 23:25.
Ответить с цитированием
  #5 (permalink)  
Старый 09.08.2014, 00:42
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от Raydezm Посмотреть сообщение
this.lastAction = action.type
Это в actioncomplete писать?.. или где?.. что-то я никак не въеду
Ответить с цитированием
  #6 (permalink)  
Старый 09.08.2014, 01:30
Интересующийся
Отправить личное сообщение для Raydezm Посмотреть профиль Найти все сообщения от Raydezm
 
Регистрация: 01.12.2013
Сообщений: 26

maksimka2112,
Да да, именно там.
Ответить с цитированием
  #7 (permalink)  
Старый 11.08.2014, 07:00
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

вы похоже store.load() вызываете до того как вызываете render.. а судя по логике вашего обработчика 'actioncomplete' на сторе должно быть наоборот

Последний раз редактировалось siber-biber, 11.08.2014 в 07:11.
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2014, 18:18
Интересующийся
Отправить личное сообщение для maksimka2112 Посмотреть профиль Найти все сообщения от maksimka2112
 
Регистрация: 07.08.2014
Сообщений: 25

Сообщение от siber-biber Посмотреть сообщение
вы похоже store.load() вызываете до того как вызываете render.. а судя по логике вашего обработчика 'actioncomplete' на сторе должно быть наоборот
а я как бы форму гружу, сторе персонально не идентифицирую...

Сообщение от Raydezm Посмотреть сообщение
Создать новое поле в классе, записать туда пришедшие данные, на afterlayout прочитать их и действовать по необходимой логике.

Что-то вроде

this.lastAction = action.type

, а потом в afterlayout

if (this.lastAction == 'load'){ ...
Большое спасибо! Ваш совет помог. Я вот как сделал:

Так как у меня таб панель, то второй вкладке задую такие параметры:
disabled: true,
	id: 'tehobId',

Далее прописываю события для данной вкладки:
'actioncomplete': { fn: function(form, action){
            var p044_chk=document.getElementsByName('p0442_c06');
            if (action.type=='load'){
                Ext.getCmp('tehobId').enable();
                    if (action.result.data.p0442_c06==1){
                        this.lastAction = 'goodLoad';
                    }else{
                        this.lastAction = 'badLoad';
                    }
            }
            
            }, scope: this, single: true },
            'afterlayout': { fn: function(form, action){
                if (this.lastAction == 'goodLoad'){
                    document.getElementsByName('p0442_c06')[0].checked=true;
                }
                if (this.lastAction == 'badLoad'){
                    document.getElementsByName('p0442_c06')[1].checked=true;
                }
            }, scope: this, single: true}


И напоследок на всякий случай (мало ли - ответ с сервера не придёт или ещё что) делаю активной вкладку:
setTimeout(function() {
Ext.getCmp('tehobId').enable();
},6500);


Как-то так. Может не совсем всё правильно. Но вроде работает.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сервер на nodejs отклоняет слишком частые запросы imissyouso AJAX и COMET 0 16.02.2014 20:41
Проблема с загрузкой файла на сервер shkarbatov Серверные языки и технологии 8 13.08.2011 01:27
Отправка файла на сервер асинхронно DDestroy Internet Explorer 0 09.03.2011 12:10
передача JSON на сервер mikeles AJAX и COMET 0 04.03.2011 11:28
Проблема с добавлением radiobutton в radiogroup Tie ExtJS 3 02.02.2011 17:28