2015-09-13 5 views
1

Я использую «Compilation.xml» шаблон из TVMLCatalogTVML listItemLockup событие нажмите

Я хотел бы добавить событие кнопку щелчка к «listItemLockup»

<listItemLockup> 
    <ordinal minLength="2" class="ordinalLayout">0</ordinal> 
    <title>Intro</title> 
    <subtitle>00</subtitle> 
    <decorationLabel>(3:42)</decorationLabel> 
</listItemLockup> 

Я пытался добавить :

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

void addEventListener (in String type, in Object listener, in optional Object extraInfo) 

Is "select" правильный тип?

Я использую следующие учебники

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

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


Update

Я получаю сообщение об ошибке

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

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); 
} 

Увидимся об ошибке первого


Cross сообщение: https://forums.developer.apple.com/thread/17859

+0

Я отредактировал для ответа на ваше «обновление», пожалуйста, проверьте мой ответ. – SerkanSerttop

ответ

5

Более распространенный примеру я видел яблоко для определения одного общего слушателя, как:

doc.addEventListener("select", Presenter.load.bind(Presenter)); 

в вашем XML, присвоить уникальные идентификаторы для элементов, или дать им способы их идентификации. Например, начало было бы что-то вроде:

load: function(event) { 
     var self = this, 
      ele = event.target, 
      attr_id = ele.getAttribute("id"), 
      audioURL = ele.getAttribute("audioURL"), 
      videoURL = ele.getAttribute("videoURL") 

И тогда вы можете делать все, что вы хотите с вашим пунктом.

if(audioURL && (event.type === "select" || event.type === "play")) { 
// 
} 

Мой совет будет более тщательно изучать файл Presenter.js для этого шаблона.

Редактировать: Ответ на ваше «обновление», связанное с doc.getElementsByTagName, не является функцией. «doc» на самом деле не существует, но общий шаблон - получить его с помощью

var doc = getActiveDocument(); 

Я предположил, что вы знаете выше. Это исправить?

1
var listItemLockupElement = doc.getElementsByTagName("listItemLockup”); 

В этом случае, listItemLockupElement - это NodeList, а не элемент. Вы можете либо перебирать список, либо добавлять слушателя событий в каждый listItemLockup, или вы можете добавить прослушиватель событий к содержащему элементу.

0

Добавление прослушивателей событий прост, если вы используете atvjs рамки.

ATV.Page.create({ 
    name: 'mypage', 
    template: your_template_function, 
    data: your_data, 
    events: { 
     select: 'onSelect', 
    }, 
    // method invoked in the scope of the current object and 
    // 'this' will be bound to the object at runtime 
    // so you can easily access methods and properties and even modify them at runtime 
    onSelect: function(e) { 
     let element = e.target; 
     let elementType = element.nodeName.toLowerCase(); 

     if (elementType === 'listitemlockup') { 
      this.doSomething(); 
     } 
    }, 
    doSomething: function() { 
     // some awesome action 
    } 
}); 

ATV.Navigation.navigate('mypage'); 

Отказ от ответственности: я являюсь создателем и хранителем atvjs и от написания этого ответа, это только рамки JavaScript для развития Apple TV с помощью TVML и TVJS. Поэтому я мог бы предоставить ссылки только из этой структуры. Ответ не следует воспринимать как предвзятое мнение.