我需要知道何时在 Apple tvOS 应用程序中从堆栈中弹出文档(屏幕)。我认为检测菜单按钮按下将是最简单的方法,但我正在使用 TVJS 并且无法弄清楚如何编写事件处理程序。
请帮助我编写一个事件处理程序,该处理程序将在文档删除、菜单按钮按下或提供替代解决方案时触发。
订阅事件unload
- 只要页面从堆栈中弹出后消失,就会触发它:
doc.addEventListener("unload", Presenter.onUnload.bind(Presenter));
[...]
onUnload: function(event) {
console.log("onUnload");
},
有onDocumentRemoval
类似的处理程序。相反,您可以做的是创建一个全局select
处理程序:
doc.addEventListener("select", self.doThing.bind(self));
然后检查触发的事件是否来自用于删除堆栈元素的按钮之一(假设这些按钮有一个名为的类delete
:
doThing: function(event){
var element = event.target;
if (element.getAttribute("class").contains("delete")){
//enter code here
}
编辑1:
我找到了TVMLKit 处理的可能事件(我知道它在 Swift/Objective-C 中,但事件是相同的):
TVElementTypePlay
- 已调度播放事件。
电视元素类型选择
- 已调度选择事件。
TVElementTypeHoldSelect
- 已调度保持事件。
TVElementTypeHighlight
- 已调度突出显示事件。
TVElementTypeChange
- 已调度更改事件。
据我所知,这些事件只能附加到模板上。我猜change
如果我可以将事件附加到监听更改,那么该事件将是完美的navigationDocument
,但这两个选项将不起作用并且都会引发错误:
附全局:
navigationDocument.addEventListener("change", function(event){console.log(event)});
附加到文档数组:
navigationDocument.documents.addEventListener("change", function(event){console.log(event)});
上面没有内置的方法来监听任何变化。但是,该事件将在侦听内部更改的模板上运行。pushed
但是当模板进出popped
堆栈时它不会触发。
我猜你需要重新设计你的应用程序才能实现你想要的。