Sencha Touch: удаление элемента, обновление представления об изменении ориентации и т. Д.
Спасибо за ответ, похоже, что мы можем куда-то попасть. Я создал новый взгляд, который прост и в простой форме. Увидеть ниже:
var homePanelTop = new Ext.Panel({ id:'topCont',
cls:'topCont'
});
var homePanelBtm = new Ext.Panel({
id:'btmCont',
cls:'btmCont'
});
App.views.HomeIndex = Ext.extend(Ext.Panel, {
id:'mainlayout',
fullscreen : true,
layout: {
type: 'vbox',
align: 'stretch',
},
defaults:{flex:1},
items: [homePanelTop, homePanelBtm],
suspendLayout: true,
monitorOrientation: true,
orientationchange: this.onOrientationChange,
onOrientationChange: function(orientation, w, h){
this.suspendLayout = false;
if(orientation === 'portrait'){
console.log('P: ' + orientation);
this.add(homePanelTop, true);
} else {
console.log('L: ' + orientation);
this.remove(homePanelTop, false);
}
this.doLayout();
}
});
Ext.reg('HomeIndex', App.views.HomeIndex);
То, что я ожидаю увидеть в приведенном выше виде, относится к первой загрузке и портрету, будет две панели: верхняя панель (желтая) и нижняя панель (синяя). Когда я вращаюсь как обычно, я все равно получаю тот же эффект.
Но то, что я хочу, это то, что, когда я поворачиваюсь в горизонтальной плоскости, верхняя панель (желтая) удаляется, а нижняя панель (синяя) заполняет остальное пространство.
Затем, когда я поворачиваюсь назад к портрету, я возвращаю обе панели в их проектных размерах (flex:1)
Что происходит с помощью кода выше (тестирование в Chrome), так это то, что верхняя панель (желтая) остается сверху, но немного меньше по высоте и не исчезает так, как должна
В любом случае обратите внимание на две команды трассировки консоли, которые у меня есть, и они показывают следующие показания при вращении:
После первой загрузки я поворачиваюсь в альбомную ориентацию и получаю:
L: пейзаж
L: пейзаж
Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove() - неправильное использование.
L: пейзаж
Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove() - неправильное использование.
L: пейзаж
Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove() - неправильное использование.
Когда я поворачиваюсь назад к портрету, я получаю следующий вывод:
L: пейзаж
Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove() - неправильное использование.
L: пейзаж
Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove() - неправильное использование.
P: портрет
P: портрет
Итак, если посмотреть на вращение lanscape, то на самом деле он показывает, как 4 раза запускает функцию onorientationchange, первый исправен, остальные три с ошибкой, так как первый уже удалил его, так что, как я полагаю, это предупреждения.
Затем с портретными я получаю два, регистрирующихся как вызовы lanscape, затем два хита, регистрирующие портретные вызовы.
Все это одним движением, так что это как-то приводит к тому, что код удаления и добавления работает не так, как предсказано, и как предотвратить четыре раза ориентацию при вращении??
Если у кого-то есть идеи по развитию этого, не стесняйтесь присоединиться.
Спасибо за помощь до сих пор Si
1 ответ
Много лет спустя... и больше для кого-то вроде меня, который наткнулся на это в поисках помощи.
Две вещи.
1) Сообщение "Попытка удалить несуществующий компонент" встречается только в "разрабатываемой" версии библиотеки ExtJS, и я не знаю, является ли это надежным индикатором проблемы.
2) Если вы можете обновить до ExtJS 4.1x. Это даст вам доступ к лучшим инструментам отладки. Я специально думаю о Ext JS Page Analyzer. Это поможет вам увидеть, что делает движок верстки в сравнении с тем, что вы надеетесь сделать.
Смотрите: http://www.sencha.com/blog/optimizing-ext-js-4-1-based-applications