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