У меня странная проблема с сенсорным сенча. Изменение значения в поле выбора застряло на экране. У меня есть приложение, в котором есть поля «Выбрать», а при изменении значения поля выбора я применяю некоторые правила. Правило состоит в том, чтобы удалить все элементы экрана и добавить его снова.Экран застрял в sencha touch select change changeener
Ниже приводится моментальный снимок кода.
Он работает абсолютно нормально с браузером хрома, сафари и браузером устройства iPad. Но теперь это дает странную проблему в iPhone и устройстве Android. Экран застрял. После изменения значения в поле выбора события не допускаются.
Шаги взяты; Кроме того, я поставил предупреждение как регистратор на каждом этапе исходного кода, чтобы обеспечить бесконечный цикл. Я также поставил обработчики исключений, чтобы убедиться, что произошла ошибка. Никаких ошибок, ни ant бесконечного цикла, которые могут вызвать проблемы с памятью/временем выполнения.
App.views.MySampleScreen = Ext.extend(Ext.Panel, {
initComponent : function() {
var titlebar = {
dock : 'top',
xtype : 'toolbar',
cls: 'x-panel-title',
title : "Home Screen"
};
var buttonbar = {
xtype : 'toolbar',
dock : 'bottom',
cls: 'x-panel-footer',
items : [
{xtype : "spacer"}
]
};
var myFieldSet = new Ext.form.FieldSet({
xtype: 'fieldset',
id : 'myFieldSet',
name: 'myFieldSet'
});
var formBase = new Ext.form.FormPanel({
ui: 'round',
id: 'standardFormBase',
items: [myFieldSet],
});
Ext.apply(this, {
scroll: 'vertical',
pinHeaders: true,
dockedItems : [titlebar, buttonbar],
items : [formBase],
listeners: {
beforeactivate: function(panel) {
createAndInitScreen();
}
}
});
App.views.MySampleScreen.superclass.initComponent.call(this);
}
});
Ext.reg('App.views.MySampleScreen', App.views.MySampleScreen);
function createAndInitScreen(){
var myFieldSet = Ext.getCmp("myFieldSet");
myFieldSet.removeAll(true);
var stateList2 = new Ext.form.Select({
label: 'State',
name: 'state',
id: 'stateLis2t',
widht: '100%',
autoLoad: true,
labelWidth: '40%',
options: [{
text: 'Test', value: 'Test'
}, {
text: 'Test2', value: 'Test2'
}, {
text: 'Test3', value: 'Test3'
}],
listeners: {
afterrender: function(ele) {
},
change: function(field, value) {
createAndInitScreen(); // Here is the problem
// if i remove this then this works, but my need
//is to call CreateAndInitScreen after value change in select()
}
}
});
myFieldSet.items.add(stateList2);
myFieldSet.show();
myFieldSet.doLayout();
}
Попробуйте удалить свойство идентификатора stateList2. Вы создаете больше одного объекта «Ext.form.Select» с тем же идентификатором. Это может вызвать странные проблемы ... – ilija139
@ ilija139 Я удалил свойство Id из Ext.form.Select. Но проблема все же существует. –
Тогда я не знаю. Вы должны изменить весь код. Если вы хотите изменить элементы в форме .Select, вам нужно удалить элементы и добавить новые, а не удалить весь объект, а затем создать новый. Код плохо структурирован, и вы, вероятно, исчерпали память или что-то подобное, или некоторый инфинитивный цикл (событие или рекурсивный). – ilija139