首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TVML listItemLockup单击事件

TVML listItemLockup单击事件
EN

Stack Overflow用户
提问于 2015-09-13 17:20:23
回答 4查看 2.5K关注 0票数 1

我使用的是来自Compilation.xmlTVMLCatalog模板

我想在“listItemLockup”中添加一个按钮单击事件

代码语言:javascript
运行
复制
<listItemLockup>
  <ordinal minLength="2" class="ordinalLayout">0</ordinal>
  <title>Intro</title>
  <subtitle>00</subtitle>
  <decorationLabel>(3:42)</decorationLabel>
</listItemLockup>

我试着补充说:

代码语言:javascript
运行
复制
App.onLaunch = function(options) {
    var templateURL = 'http://localhost:8000/hello.tvml';
    var doc = getDocument(templateURL);
    //doc.addEventListener("select", function() { alert("CLICK!") }, false);
    var listItemLockupElement = doc.getElementsByTagName("listItemLockup");
    listItemLockupElement.addEventListener("select", function() { alert("CLICK!") }, false);
}

addEventListener

代码语言:javascript
运行
复制
void addEventListener (in String type, in Object listener, in optional Object extraInfo)

“选择”类型正确吗?

我一直在使用以下教程

http://jamesonquave.com/blog/developing-tvos-apps-for-apple-tv-with-swift/

http://jamesonquave.com/blog/developing-tvos-apps-for-apple-tv-part-2/

更新

我搞错了

代码语言:javascript
运行
复制
ITML <Error>: doc.getElementsByTagName is not a function. (In 'doc.getElementsByTagName("listItemLockup")', 'doc.getElementsByTagName' is undefined) - http://localhost:8000/main.js - line:27:58

我试着把这个添加到'onLaunch‘

代码语言:javascript
运行
复制
var listItemLockupElements = doc.getElementsByTagName("listItemLockup");
for (var i = 0; i < listItemLockupElements.length; i++) {   
    //var ele = listItemLockupElements[i].firstChild.nodeValue;
    listItemLockupElements[i].addEventListener("select", function() { alert("CLICK!") }, false);
}

我先看看这个错误

交叉邮政:https://forums.developer.apple.com/thread/17859

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-09 09:47:34

我在苹果公司看到的更常见的例子是定义一个单一的整体侦听器,如:

代码语言:javascript
运行
复制
doc.addEventListener("select", Presenter.load.bind(Presenter));

在xml中,将唯一的In分配给元素,或者给出标识它们的方法。例如,开头应该是这样的:

代码语言:javascript
运行
复制
load: function(event) {
        var self = this,
            ele = event.target,
            attr_id = ele.getAttribute("id"),
            audioURL = ele.getAttribute("audioURL"),
            videoURL = ele.getAttribute("videoURL")

然后你可以用你的物品做任何你想做的事。

代码语言:javascript
运行
复制
if(audioURL && (event.type === "select" || event.type === "play")) {
//
}

我的建议是更仔细地研究这个模式的Presenter.js文件。

编辑:回答与doc.getElementsByTagName相关的“更新”不是一个函数。"doc“实际上并不存在,但是一般的模式是

代码语言:javascript
运行
复制
var doc = getActiveDocument();

我以为你会知道上面的事。这能治好吗?

票数 5
EN

Stack Overflow用户

发布于 2015-09-14 03:25:38

代码语言:javascript
运行
复制
var listItemLockupElement = doc.getElementsByTagName("listItemLockup”);

在这种情况下,listItemLockupElement是一个NodeList,而不是一个元素。可以迭代列表并向每个listItemLockup添加事件侦听器,也可以将事件侦听器添加到包含的元素中。

票数 1
EN

Stack Overflow用户

发布于 2015-09-24 10:06:03

在NodeList中寻址项时,可以使用item(i)方法,而不是标准的数组访问符号:

代码语言:javascript
运行
复制
 listItemLockupElements.item(i).addEventListener("select", function() { })

请参阅:https://developer.mozilla.org/en-US/docs/Web/API/NodeList/item

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32552440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档