Кнопка Назад на первом уровне nestedlist - PullRequest
2 голосов
/ 15 августа 2011

У меня есть nestedList с несколькими уровнями, который появляется, когда пользователь нажимает кнопку на экране.Когда появляется nestedList, кнопка «Назад» отсутствует (потому что мы находимся в верхней части дерева, поэтому понятно, что возвращаться некуда), тогда как нажатие на элементы в списке приводит вас к экранам с кнопкой «Назад».

Я бы хотел добавить кнопку возврата на первый экран.Мне удалось сделать это, но не без добавления одной и той же кнопки «Назад» к каждому подсписку в nestedList - это дает эффект 1 кнопки «Назад» на верхнем уровне и 2 кнопок «Назад» (одна, чтобы полностью вывести вас из nestledList,и один, чтобы поднять вас на уровень) на каждом последующем уровне.

Может кто-нибудь помочь мне понять, как иметь 1 кнопку назад на каждом экране, включая верхний уровень, чтобы закрыть список?

Большое спасибо

PS. В настоящее время я использую неприятный обходной путь - вместо этого в правом верхнем углу каждого экрана есть кнопка «Закрыть».

Ответы [ 2 ]

4 голосов
/ 21 августа 2011

Я не знаю, насколько вам комфортно с внутренней работой Sencha Touch, поэтому как вы будете поступать так, зависит от вас -

Кнопка возврата там, скрытая, когда вложенный списокотображается (созданный в функции initComponent с hidden: true), а затем onBackTap, onItemTap и setActivePath будут вызывать syncToolbar ближе к концу своих функций, где кнопка «назад» скрыта, когда вы находитесь на глубине 0.

Таким образом, есть 2 места, с которыми вам нужно что-то сделать, во-первых, это initComponent, который прост - просто внедрите initComponent в свой nestedList, вызовите initComponent суперкласса, а затем установите backButton видимым

var myNestedList = new Ext.NestedList({
  ...,
  initComponent: function() {
    myNestedList.superclass.initComponent.call(this);
    this.backButton.setVisible(true);
  },
  ...
});

Это нужно для того, чтобы показать это изначально ... как вы решите, как справиться с исправлением syncToolbar, зависит от вас.Вы можете использовать Ext.override, вы можете скопировать и вставить всю функцию syncToolbar в ваш объект nestedList, который также переопределит его, или вы можете делать то, что вам никогда не говорили, и просто редактировать файл sencha-touch.js напрямую,Однако, если вы решите это сделать, то вы хотите изменить

syncToolbar: function(card) {
  ...
  backToggleMth = (depth !== 0) ? 'show' : 'hide';

  if (backBtn) {
    backBtn[backToggleMth]();
    if (parentNode) { 
      backBtn.setText(backBtnText); 
    }
  }
  ... };

. Вы можете либо изменить backToggleMth на = 'show', либо просто удалить if (backBtn {...} все вместе.

0 голосов
/ 08 октября 2014

В Sencha Touch 2.2 мне пришлось использовать другой код:

Ext.create('Ext.NestedList', {
  ...,
  listeners: {
    initialize: function(obj) {
      obj.getBackButton().show();
    },
    back: function(obj, node, lastActiveList, detailCardActive) {
      switch(node.getDepth()) {
      case 1:
        obj.getBackButton().show();
        break;
      case 0:
        alert("wohooooooo!");
        break;
      }
    }
  }
}
...