Как определить нажатие кнопки меню в приложении TVOS с помощью TVJS

Мне нужно знать, когда документ (экран) выталкивается из стека в приложении Apple tvOS. Я думал, что обнаружение нажатия кнопки меню будет самым простым способом, но я использую TVJS и не смог понять, как написать обработчик событий.

Пожалуйста, помогите мне написать обработчик событий, который будет срабатывать при удалении документа, нажатии кнопки меню или предложить альтернативное решение.


person Corgalore    schedule 16.12.2015    source источник
comment
Вы используете menuBarTemplate? Если да, то как выглядит menuItem, к которому вы хотите прикрепить событие? Опубликуйте немного кода, чтобы мы могли помочь вам лучше :)   -  person sailens    schedule 18.12.2015


Ответы (2)


Подпишитесь на событие unload — оно срабатывает всякий раз, когда страница исчезает после извлечения из стека:

doc.addEventListener("unload", Presenter.onUnload.bind(Presenter));

[...]

onUnload: function(event) {
   console.log("onUnload");
},
person Baa    schedule 23.12.2015
comment
Это работает и для корневого шаблона? Где вы нашли все поддерживаемые события (официальная документация ужасна)? - person sailens; 23.12.2015
comment
Корневой шаблон? Нравится, что последний закрывается при выходе из приложения? Честно говоря, я понятия не имею... Но для этого вы можете использовать событие App.onSuspend в своем основном App.js. Не уверен, что знаю все поддерживаемые события - в основном я брал их из разных примеров, разбросанных по Интернету. Плюс некоторый предыдущий опыт работы со старыми квадроциклами (говорю PlexConnect). - person Baa; 23.12.2015
comment
Событие onSuspend звучит правильно. Спасибо. Что-нибудь по другому вопросу, где-нибудь с более полной документацией? - person sailens; 23.12.2015
comment
Нет, извините, больше нет полной документации. Уже добавил несколько замечаний по этому поводу в моем предыдущем комментарии. :-D - person Baa; 23.12.2015
comment
Хм, звучит многообещающе, я проверю событие выгрузки в навигационном документе. - person Corgalore; 29.12.2015

Есть такой обработчик для onDocumentRemoval или подобного. Вместо этого вы можете создать глобальный обработчик select:

doc.addEventListener("select", self.doThing.bind(self));

А затем проверьте, исходит ли событие fired от одной из кнопок, используемых для удаления элемента стека (предположим, что у этих кнопок есть класс с именем delete:

doThing: function(event){
    var element = event.target;
    if (element.getAttribute("class").contains("delete")){
       //enter code here
    }

РЕДАКТИРОВАТЬ 1:

Я нашел возможные события, которые обрабатывает TVMLKit (я знаю, что это в Swift/Objective-C, но события те же):

TVElementTypePlay

  • Было отправлено игровое событие.

TVElementTypeSelect

  • Событие select отправлено.

TVElementTypeHoldSelect

  • Событие удержания отправлено.

TVElementTypeHighlight

  • Было отправлено событие Highlight.

TVElementTypeChange

  • Событие изменения отправлено.

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

Прикреплен к глобальному:

navigationDocument.addEventListener("change", function(event){console.log(event)});

Прикрепил к массиву документов:

navigationDocument.documents.addEventListener("change", function(event){console.log(event)});

Для тех, кто выше, нет встроенного метода прослушивания любых изменений. Однако событие будет работать с шаблоном, прослушивающим внутренние изменения. Но он не сработает, когда шаблон будет pushed в стеке или popped из стека.

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

person sailens    schedule 22.12.2015
comment
Я это понимаю. Проблема в том, что когда пользователь нажимает кнопку «Меню» на пульте Apple, он удаляет документ из стека. Как я узнаю, когда эта кнопка была нажата? Мне действительно просто нужно знать, когда документ был удален из стека. Есть ли событие, которое я могу прослушать? - person Corgalore; 22.12.2015
comment
@Corgalore Обновил пост с плохими новостями - person sailens; 23.12.2015