возможно спалит программную навигационную ошибку? - PullRequest
1 голос
/ 03 января 2012

Возможное описание ошибки

после этого вопроса Я думаю, что есть ошибка в Интеграция с историей приложения Spotify , если я создаю вкладки A, B, C, где A содержит список D. Если я нажму

A --> B --> C --> A
это может быть сделано программно как
spotify:app:appname:A
spotify:app:appname:B
spotify:app:appname:C
spotify:app:appname:A

, который работает нормально. Однако, если я нажму

A --> A:D --> C --> A --> B
это можно сделать программно как
spotify:app:appname:A
spotify:app:appname:A:D
spotify:app:appname:C
spotify:app:appname:A
spotify:app:appname:B

Что позволяет мне нажимать на A, если я просматриваю A: D (решая проблему моего исходного поста)

Однако, когда я щелкаю по второй последовательности и просматриваю состояние

sp.core.getArguments(); 
вторая последовательность отображается как
spotify:app:appname:A
spotify:app:appname:A:D
spotify:app:appname:C
spotify:app:appname:A:D
spotify:app:appname:B

Значение 1

Если я использую состояние и создаю дисплей с чем-то вроде

  sp.core.addEventListener("argumentsChanged", tabUpdate);

function tabUpdate(po) {
    var args = sp.core.getArguments();     
    switch(args[0])
    {
      case "A":
        showA(args);
        break;
      case "B":
        showB();
        break;
      case "C":
        showC();
        break;
    }

будет отображаться неправильно, так как: D прикреплен к вкладке A, когда я просто нажимаю на вкладку A.

Значение 2

Если я просто использую состояние, чтобы при просмотре A и A: D различались (иначе я могу вернуться к A из A: D, нажав на вкладку)

Исправление изменений дисплея с помощью элемента onclick для списка D, который будет означать, что он работает, нажимая вперед. Однако использование навигационных кнопок для перехода назад будет отображаться неправильно. Т.е., если я нажму на кнопку, то с помощью кнопки «назад» отобразится

B --> A --> C --> A --> A

вместо

B --> A --> C --> A:D --> A

Альтернатива 2

с такой же настройкой, описанной выше, но с использованием ссылки на D самостоятельно.

spotify:app:appname:A
spotify:app:appname:D
spotify:app:appname:C
spotify:app:appname:A

отображается как

spotify:app:appname:A
spotify:app:appname:D:A
spotify:app:appname:C
spotify:app:appname:D:A

Это означает, что когда я возвращаюсь назад к A из C, он не отображает A.

Вопрос

Есть ли способ обойти это?

Я могу собрать приложение, чтобы скопировать это, если требуется.

1 Ответ

2 голосов
/ 17 февраля 2012

Я знаю, о чем вы говорите, и я могу подтвердить, что эта проблема существует.

Проще говоря, если вы находитесь на вкладке A, и вы перемещаетесь внутри этой вкладки, нажимая на window.location, когда вы переходите на вкладку B и нажимаете обратно на вкладку A, вы получаете те же аргументы, которые вы получили последними раз вы смотрели на вкладку А.

Я думаю, что на самом деле это имеет смысл, поскольку поддерживает историю состояний на каждой вкладке, НО бывают случаи, когда вы этого не хотите, в зависимости от рабочего процесса вашего приложения.

Можно использовать обработчик события argumentsChanged, чтобы проверить это, но есть проблема: вы не можете определить, было ли вызвано argumentsChanged, щелкнув вкладку или нажав кнопки «назад / вперед».

Если объект события, переданный обработчику события argumentsChanged, мог бы сообщить, нажал ли пользователь вкладку или перемещается с помощью кнопок назад / вперед, тогда разработчик может очень легко решить эти рабочие процессы.

...