2013-03-25 1 views
2

Довольно новый для разработки для Windows 8, я работаю над приложением, которое имеет довольно плоскую модель. Я посмотрел и посмотрел, но, похоже, не нашел четкого ответа о том, как установить страницу WinJS, чтобы предотвратить обратную навигацию. Я пробовал копаться в API, но он ничего не говорит по этому поводу.Приложение Win8 JS: как можно предотвратить обратную навигацию? Невозможно установить WinJS.Navigation.canGoBack

Код я пытаюсь использовать это

WinJS.Navigation.canGoBack = false; 

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

Благодаря раньше времени, ~ Шон

+1

Я думаю, что я бы справился с этим, это скрыть кнопку «Назад» на страницах, на которых вы хотите отключить обратную навигацию. – bmceldowney

+0

@bmceldowney См. Мой ответ на сообщение для комментария. Я собираюсь задать вопрос на несколько дней, если вы сможете предоставить мне лучшее решение. Спасибо, –

ответ

7

canGoBack имеет только геттер (определенный в base.js), и это отражает отсутствие или присутствие backstack; а именно nav.history.backstack.

Внешний вид самой кнопки управляется отключенным атрибутом на ассоциированном объекте DOM-кнопки, который, в свою очередь, является частью селектора CSS, контролирующего видимость. Поэтому, если вы возитесь с дисплеем кнопки «Назад», вам следует знать, что навигационная сантехника делает то же самое.

Возможна установка задней стопки; есть образец Navigation and Navigation History Sample, который включает в себя восстановление истории, а также предотвращение навигации с использованием beforenavigate, со следующим кодом:

// in ready 
    WinJS.Navigation.addEventListener("beforenavigate", this.beforenavigate); 


    // 
    beforenavigate: function (eventObject) { 
     // This function gives you a chance to veto navigation. This demonstrates that capability 
     if (this.shouldPreventNavigation) { 
      WinJS.log && WinJS.log("Navigation to " + eventObject.detail.location + " was prevented", "sample", "status"); 
      eventObject.preventDefault(); 
     } 
    }, 
+0

Самое смешное в этом ответе, что у меня есть обе ссылки, помеченные закладкой в ​​папке, посвященной этому проекту. Есть ли способ использовать функцию forforenavigate(), чтобы отключить заднюю часть в обходной манере? –

+0

Не знаете, почему это не правильный ответ в целом. Хороший товарищ по шоу. – deepelement

+0

Обновлен до принятого ответа. Оглядываясь на проблему после нескольких лет опыта ... xD Как сказал Юлий Цезарь: «Опыт - учитель всего». –

0

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

Оригинальный алгоритм: How to Get Element By Class in JavaScript?


МОЕГО РЕШЕНИЕ

В начале страницы фрагмента, справа, как определение страницы начинается декларирование готовности: функции, я использовал адаптированную версию из приведенного выше алгоритма и использовал результирующий выбор элемента для установки отключенного атрибута.

 // Retrieve Generated Back Button 
     var elems = document.getElementsByTagName('*'), i; 

     for (i in elems) 
     { 
      if((" "+elems[i].className+" ").indexOf("win-backbutton") > -1) 
      { 
       var d = elems[i]; 
      } 
     } 

     // Disable the back button 
     d.setAttribute("disabled", "disabled"); 

Код получает все элементы из DOM страницы и фильтрует его для сгенерированной кнопки возврата. Когда соответствующий элемент найден, ему присваивается переменная, и оттуда мы можем установить свойство disabled.


я не мог найти много документации по работе вокруг навигации по умолчанию в приложении WinJS навигации, так вот некоторые методы, которые не удалось (для справочных целей):

  • Получение элемент за классом и настройка | Возможно, не удалось сделать это неправильно, так как у меня мало опыта работы с HTML и javascript.

  • Использование вышеуказанного метода, но установка атрибута в цикле for прерывает приложение и заставляет его замораживаться по неизвестным причинам.

  • Установка атрибута в файле default.js перед завершением навигации. | Вызовы javascript не смогли распознать либо вызванные методы, либо элементы DOM, предположительно из-за состояния инициализации страницы.

Было несколько других, но я думаю, что должен быть лучший способ восстановить элемент после загрузки страницы. Если кто-нибудь сможет просветить меня, я буду очень благодарен. ~ Sean R.

+0

@bmceldowney Если у вас есть лучший способ, поделитесь им. Поскольку в StackOverflow нет личных сообщений, отправьте ответ. Благодаря! –

3

Вы не можете изменить canGoBack, но вы можете отключить кнопку, чтобы скрыть ее и освободить стек истории.

// disabling and hiding backbutton 
    document.querySelector(".win-backbutton").disabled = true; 
    // freeing navigation stack 
    WinJS.Navigation.history.backStack = []; 

Это предотвратит движение назад и по-прежнему позволит двигаться вперед.

+1

Итак, как насчет навигации по клавиатуре, например. Alt + курсор влево? –

+0

@ 0xA3 не пробовал. Поскольку backStack пуст, я бы сказал, что ничего не происходит. Но я могу ошибаться. Если вы получите Exception с клавиатурой, сообщите мне об этом, и я буду искать решение в эти выходные. –

Смежные вопросы