2

有人在这里问了同样的问题How do you get the value from a TVML textField? 但没有解释完整的答案,我的评论已被编辑,建议我提出一个全新的问题。这里是...

任何人都可以帮助了解如何最好地textField从 TVML 获得对节点及其键盘值的引用吗?现在,我正在使用下面的代码Presenter.js来访问textField一旦用户单击Done模板中显示表单和键盘的按钮,但仍然得到

ITML:未定义不是对象(评估'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...  
    ...........................

更新:

我通过遍历 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 
4

3 回答 3

2

从文档的根目录开始怎么样?使用或访问。getElementsByTagName_getElementByTagNamegetElementByIdtextField

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

var value = textField.getFeature("Keyboard").text;
于 2015-10-24T17:31:39.457 回答
0

假设自我解释的解决方案,我正在添加以完成更改回调的文本:

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

并假设 formTemplate 就像

<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类中,我将添加以处理更多选择器,例如:

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)

    }
}
于 2015-10-16T21:28:20.113 回答
0

你需要使用

xmlElem.item(i)

代替

xmlElem.item[i]
于 2015-11-09T10:21:30.880 回答