2015-09-27 48 views
1

有人在这里问了同样的问题How do you get the value from a TVML textField?,但没有解释完整的答案,我的评论被编辑,提示我问一个全新的问题。这里是...如何在TVJS中获取TVML文本字段的节点和键盘引用?

任何人都可以帮助理解如何最好地从TVML中获得对textField节点及其键盘值的参考吗?现在,我在下面使用这段代码中Presenter.js才能到textField一旦用户点击该模板中Done按钮显示形式&键盘,但仍然得到

器iTM1:未定义不是一个对象(评估'textField.getFeature') - .../JS/Presenter.js

当我使用getFeature("Keyboard")

load: function(event) { 
var self = this, 
    ele = event.target, 
    templateURL = ele.getAttribute("template"), 
    presentation = ele.getAttribute("presentation"), 
    videoURL = ele.getAttribute("videoURL"); 

if (templateURL && (event.type == "select")) { 
    var formTemplate = ele.parentNode.parentNode; // that should give me <formTemplate> element 
    var children = formTemplate.childNodes; 
    var textField = children[1]; // which is the second element in <formTemplate><banner></banner><textField></textField>... 
    var keyboard = textField.getFeature("Keyboard"); // this raises the ITML Error... 
    ........................... 

UPDATE:

我找到了解决办法通过查看accessing elements by traversing XML DOM

var formTemplate = ele.parentNode.parentNode; // your formTemplate button 
var children = formTemplate.childNodes; 
var textField = children.item(1); // replace "1" with the index of "textField" element in your template 
var keyboard = textField.getFeature("Keyboard"); // get the textField's Keyboard element 
var userValue = keyboard.text; // the value entered by the user on the Apple TV keyboard 

回答

0

假定自我解释的解决方案, 我加入是完整的更改回调文字:

var keyboard = textField.getFeature("Keyboard"); 
keyboard.onTextChange = function() { 
    console.log("onTextChange "+keyboard.text) 
} 

并假设表格模板类似于

<formTemplate> 
    <banner> 
     <title>${formTitle}</title> 
     <description class="longDescriptionLayout">${formDescription}</description> 
    </banner> 
    <textField>${formPlaceholder}</textField> 
    <footer> 
     <button id="pairingCodeInput"> 
     <text>Confirm</text> 
     </button> 
    </footer> 
    </formTemplate> 

Presenter I类会增加处理更多的选择是这样的:

if ((event.type == "select")) { // item selected 
    if (itemId == "pairingCodeInput") { // form input 
     var formTemplate = ele.parentNode.parentNode; 
     var children = formTemplate.childNodes 
     var textField = children.item(1) 
     var keyboard = textField.getFeature("Keyboard") 
     keyboard.onTextChange = function() { 
      console.log("onTextChange " + keyboard.text) 
     } 
     var userValue = keyboard.text 
     console.log("Entered " + userValue) 

    } 
} 
1

如何起始于文档的根?使用getElementsByTagName,getElementByTagNamegetElementById来访问textField

var doc = navigationDocument.documents[navigationDocument.documents.length-1]; 
var textField = doc.getElementByTagName("textField") 

var value = textField.getFeature("Keyboard").text; 
0

您需要使用

xmlElem.item(i) 

,而不是

xmlElem.item[i] 
相关问题