强制视图在Apple TV / tvos上重新加载tvml内容

时间:2015-11-04 21:20:44

标签: javascript tvos apple-tv tvml

我一直致力于为Apple TV上的tvOS应用程序动态生成tvml-templates,内容频繁变化。生成模板工作正常,但是当在视图之间来回导航或离开并重新进入应用程序时,我无法让应用程序更新/重新加载模板的内容。只有重新启动才能重新加载tvml模板。

4 个答案:

答案 0 :(得分:2)

每当您在模板文档中操作TVML时,您的模板都会自动刷新。

如果您保留对文档的引用,请执行以下操作:

var myDoc;

resourceLoader.loadResource(templateURL,
   function(resource) {
     if (resource) {
       myDoc = self.makeDocument(resource);
     });
   }                         

您可以使用 myDoc 操作TVML,您的视图会自动更改。

因此,如果您的模板文档包含" collectionList"你要运行这段代码:

//Removes the child elements of the first collectionList
var collectionLists = myDoc.getElementsByTagName("collectionList");
var collectionList = collectionLists.item(0);
while (collectionList.firstChild) {
   collectionList.removeChild(collectionList.firstChild);
}

您的视图将不再显示collectionList中的UI元素。在代码运行的那一刻,视图将自动刷新。

答案 1 :(得分:1)

@shirefriendship的回答指出了我正确的方向(谢谢!)。作为另一个示例,如果要更改模板中单个元素的文本(例如描述),则需要使用innerHTML属性:

function changeDescription(incomingString) {
    console.log("inside the change description function")
    if (incomingString) {
        var theDescription = myDoc.getElementsByTagName("description").item(0);
        theDescription.innerHTML = incomingString;
    }
}

这会立即将描述更改为观看者。

答案 2 :(得分:1)

如果您使用atvjs框架,则可以轻松创建并导航到导航时重新生成的动态页面。

ATV.Page.create({
    name: 'home',
    url: 'path/to/your/api/that/returns/json',
    template: your_template_function
});
// navigate to your page
ATV.Navigation.navigate('home');

答案 3 :(得分:0)

在API的标头中设置:

  

缓存控制:无缓存

从Apple Docs获得:https://developer.apple.com/library/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html

  

重要

     

通常,从Web服务器提供JavaScript和XML文件时   需要确保始终可以看到对页面的任何更改   客户端应用。为此,您的服务器必须确保客户端   不会缓存任何页面。当您的服务器响应HTTP时   请求不应缓存的页面,服务器应该   包括Cache-Control:HTTP响应头中的no-cache。