сервер и 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}
});
|
Очень хороший совет - не используйте нативные 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 версию Экста. А в сравнении с четвёртой там есть различия. Цитата:
Ещё можно найти радиокнопку, используя в listeners событие afterlayout. Но тогда я не могу знать что пришло с сервера! То есть проверку if (action.result.data.p0442_c06==1) - сделать не удастся. Но кнопка проставится правда..... Как же быть? Второй день ничего путного не придумаю. |
Создать новое поле в классе, записать туда пришедшие данные, на afterlayout прочитать их и действовать по необходимой логике.
Что-то вроде this.lastAction = action.type , а потом в afterlayout if (this.lastAction == 'load'){ ... |
Цитата:
|
maksimka2112,
Да да, именно там. |
вы похоже store.load() вызываете до того как вызываете render.. а судя по логике вашего обработчика 'actioncomplete' на сторе должно быть наоборот
|
Цитата:
Цитата:
Так как у меня таб панель, то второй вкладке задую такие параметры: 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);
Как-то так. Может не совсем всё правильно. Но вроде работает. |
| Часовой пояс GMT +3, время: 03:54. |