Принудительно перезагрузить tvml-контент на Apple TV/tvos

Я работал над динамическим созданием tvml-шаблонов с очень часто меняющимся содержимым для приложения tvOS на Apple TV. Генерация шаблонов работает нормально, однако мне не удалось заставить приложение обновлять/перезагружать содержимое шаблона при переходе между представлениями или при выходе и повторном входе в приложение. Кажется, что только перезагрузка перезагружает шаблон tvml.


person Vince L.    schedule 04.11.2015    source источник


Ответы (4)


Ваш шаблон будет обновляться автоматически всякий раз, когда вы манипулируете TVML в документе шаблона.

Если вы поддерживаете ссылку на документ следующим образом:

var myDoc;

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

вы можете манипулировать TVML с помощью myDoc, и ваше представление изменится автоматически.

Итак, если ваш документ-шаблон включает в себя «список-коллкций», и вы должны были запустить этот код:

//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. Представление будет обновляться в момент запуска кода.

person shirefriendship    schedule 14.11.2015
comment
получить пример приложения клиентского сервера в Swift2 @ github.com/phanisai4u/sampleAppsSwift/tree/ мастер/ - person Phani Sai; 15.12.2015

Ответ @shirefriendship указал мне правильное направление (спасибо!). В качестве другого примера, если вы хотите изменить текст одного элемента в шаблоне (например, описание), вам нужно будет использовать свойство innerHTML:

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

Это немедленно изменяет описание для зрителя.

person coco    schedule 18.01.2016

Если вы используете платформу 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');
person eMAD    schedule 30.01.2016

Установите это в заголовке вашего API:

Кэш-Контроль: без кеша

Получено из Apple Docs: https://developer.apple.com/library/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html

ВАЖНЫЙ

При обслуживании файлов JavaScript и XML с вашего веб-сервера вам часто необходимо убедиться, что любые изменения на ваших страницах всегда видны клиентскому приложению. Для этого ваш сервер должен убедиться, что клиент не кэширует ни одну из страниц. Когда ваш сервер отвечает на HTTP-запрос страницы, которую не следует кэшировать, сервер должен включить Cache-Control:no-cache в заголовок HTTP-ответа.

person Sumoanand    schedule 18.04.2016