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).

Что происходит с использованием приведенного выше кода (тестирование в хроме), так это то, что верхняя панель (желтая) остается вверху, но немного меньше по высоте и не исчезает, как должна.

В любом случае обратите внимание на две консольные команды трассировки, которые у меня есть, и они показывают следующие показания при чередовании:

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

П: пейзаж

П: пейзаж

Попытка удалить несуществующий компонент. Ext.Container: remove принимает аргумент удаляемого компонента. cmp.remove() неправильное использование.

П: пейзаж

Попытка удалить несуществующий компонент. Ext.Container: remove принимает аргумент удаляемого компонента. cmp.remove() неправильное использование.

П: пейзаж

Попытка удалить несуществующий компонент. Ext.Container: remove принимает аргумент удаляемого компонента. cmp.remove() неправильное использование.

Когда я поворачиваюсь обратно в книжную ориентацию, я получаю следующий вывод:

П: пейзаж

Попытка удалить несуществующий компонент. Ext.Container: remove принимает аргумент удаляемого компонента. cmp.remove() неправильное использование.

П: пейзаж

Попытка удалить несуществующий компонент. Ext.Container: remove принимает аргумент удаляемого компонента. cmp.remove() неправильное использование.

П: портрет

П: портрет

Итак, глядя на это при вращении lanscape, на самом деле каким-то образом функция onorientationchange срабатывает 4 раза, первый раз в порядке, остальные три с ошибкой, так как первый уже удалил ее, так что предупреждения ибо я верю.

Затем с портретными я получаю два вызова, регистрируемых как вызовы lanscape, а затем два обращения, регистрирующие портретные вызовы.

Все это одним движением, так что это как-то заставляет код удаления и добавления работать не так, как предполагалось, и как предотвратить вызов ориентации четыре раза при вращении ??

Если у кого-то есть идеи по развитию этого, не стесняйтесь присоединиться.

Спасибо за помощь до сих пор Si


person Simon Davies    schedule 29.11.2011    source источник


Ответы (1)


Много лет спустя... и больше для кого-то вроде меня, который наткнулся на это в поисках помощи.

Две вещи.

1) Сообщение «Попытка удалить несуществующий компонент» встречается только в «разрабатываемой» версии библиотеки ExtJS, и я не уверен, что это надежный индикатор проблемы.

2) Если вы можете перейти на ExtJS 4.1x. Это даст вам доступ к лучшим инструментам отладки. Я имею в виду именно «Ext JS Page Analyzer». Это поможет вам увидеть, что делает механизм компоновки, а не то, на что вы надеетесь.

См.: http://www.sencha.com/blog/optimizing-ext-js-4-1-based-applications

person AnthonyVO    schedule 05.02.2013
comment
к сожалению, я отказался от призрака с сенчей, но спасибо за отзыв - person Simon Davies; 12.02.2013
comment
Я проделал достаточно работы с ExtJS, чтобы понять, откуда может исходить ваше недовольство. Это определенно другой зверь, чем jQuery или любая другая подобная библиотека. - person AnthonyVO; 12.02.2013
comment
Да! Я перешел на такие, как Emberjs и Angularjs :-) - person Simon Davies; 13.02.2013