1

TVMLCatalogの「Compilation.xml」テンプレートを使用しています

「 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)

「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/


アップデート

エラーが発生する

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

最初にエラーについて確認します


クロスポスト: https://forums.developer.apple.com/thread/17859

4

4 に答える 4

5

私が Apple で見たより一般的な例は、次のような単一の全体的なリスナーを定義することです。

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

xml で、要素に一意の ID を割り当てるか、それらを識別する方法を与えます。たとえば、冒頭は次のようになります。

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

上記はご存知かと思います。それはそれを修正しますか?

于 2015-11-09T09:47:34.263 に答える
1
var listItemLockupElement = doc.getElementsByTagName("listItemLockup”);

この場合、listItemLockupElement は要素ではなく NodeList です。リストを反復処理して各 listItemLockup にイベント リスナーを追加するか、イベント リスナーをそれを含む要素に追加することができます。

于 2015-09-14T03:25:38.330 に答える
0

NodeList 内の項目をアドレス指定するときは、標準の配列アクセス表記ではなく item(i) メソッドを使用します。

 listItemLockupElements.item(i).addEventListener("select", function() { })

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

于 2015-09-24T10:06:03.227 に答える