Apple 的 TVML 文档中有错误吗? pushPage 函数不起作用

Error in Apple's TVML documentation? pushPage function doesn't work

2017 年 6 月 1 日更新,在底部粘贴了正确的代码。

我正在阅读 Apple 的 TVML 指南,第 2 部分:在页面之间导航。 (https://developer.apple.com/library/content/documentation/TVMLKitJS/Conceptual/TVMLProgrammingGuide/NavigatingBetweenPages.html#//apple_ref/doc/uid/TP40016718-CH9-SW1)

一切都很好,直到最后一位(清单 4-4),它允许您使用遥控器上的菜单按钮 return 到上一页。每当我尝试时,我的示例应用程序根本不会加载:

var baseURL;

function loadingTemplate() {
    var template = '<document><loadingTemplate><activityIndicator><text>Loading</text></activityIndicator></loadingTemplate></document>';
    var templateParser = new DOMParser();
    var parsedTemplate = templateParser.parseFromString(template, "application/xml");
    return parsedTemplate;
}

function getDocument(extension) {
    var templateXHR = new XMLHttpRequest();
    var url = baseURL + extension;
    var loadingScreen = loadingTemplate();

    templateXHR.responseType = "document";
    templateXHR.addEventListener("load", function() {pushPage(templateXHR.responseXML, loadingScreen);}, false);
    templateXHR.open("GET", url, true);
    templateXHR.send();
}

function pushPage(page, loading) {
var currentDoc = getActiveDocument();
    navigationDocument.replaceDocument(page, loading);
}

App.onLaunch = function(options) {
    baseURL = options.BASEURL;
    var extension = "templates/InitialPage.xml";
    getDocument(extension);
}

我错过了什么?


这个有效:

var baseURL;

function loadingTemplate() {
    var template = '<document><loadingTemplate><activityIndicator><text>Loading</text></activityIndicator></loadingTemplate></document>';
    var templateParser = new DOMParser();
    var parsedTemplate = templateParser.parseFromString(template, "application/xml");
    navigationDocument.pushDocument(parsedTemplate);
    return parsedTemplate;

}

function getDocument(extension) {
    var templateXHR = new XMLHttpRequest();
    var url = baseURL + extension;
    var loadingScreen = loadingTemplate();

    templateXHR.responseType = "document";
    templateXHR.addEventListener("load", function() {pushPage(templateXHR.responseXML, loadingScreen);}, false);
    templateXHR.open("GET", url, true);
    templateXHR.send();
}

function pushPage(page, loading) {
    navigationDocument.replaceDocument(page, loading);
}

App.onLaunch = function(options) {
    baseURL = options.BASEURL;
    var extension = "templates/InitialPage.xml";
    getDocument(extension);
}

是的,我认为有误。他们应该保持路线

navigationDocument.pushDocument(parsedTemplate);

在 loadingTemplate 方法的末尾。

想法是推送加载页面,然后用新页面替换它。

在旁注中,行

var currentDoc = getActiveDocument();

这里没有生意。此代码显然没有经过测试或审查。