2015-11-04 31 views
3

我一直致力於在Apple TV上爲tvOS應用程序頻繁更改內容而動態生成tvml模板。生成模板工作正常,但我無法讓應用更新/重新加載視圖之間來回導航或離開和重新進入應用時的模板內容。只有重啓似乎重新加載tvml模板。強制視圖重新加載Apple TV/tvos上的tvml內容

回答

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元素。視圖將在代碼運行時刷新自己。

+0

在Swift2中獲取客戶端服務器示例應用程序@ https://github.com/phanisai4u/sampleAppsSwift/tree/master/TvOSClientServerBasisSample/TestTvOS –

0

@shirefriendship的答案指出我的方向正確(謝謝!)。再舉一個例子,如果你想改變一個模板(如描述)的單個元素的文本,你就需要使用innerHTML屬性:

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

這將立即更改描述給觀衆。

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'); 
0

設置這在您的API的報頭:

緩存控制:無緩存

蘋果文檔明白了:https://developer.apple.com/library/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html

重要

當ser通過Web服務器瀏覽JavaScript和XML文件,您經常需要 以確保對您的頁面所做的任何更改始終對客戶端應用程序 可見。爲此,您的服務器必須確保客戶端 不緩存任何頁面。當服務器響應HTTP 請求不應緩存的頁面時,服務器應在 的HTTP響應頭中包含Cache-Control:no-cache。