Force la vue pour recharger le contenu de TVTV sur Apple TV / tvos

J'ai travaillé sur la génération dynamique de modèles tvml avec un contenu très fréquent pour une application tvOS sur Apple TV. La génération des modèles fonctionne bien, mais je n'ai pas pu obtenir l'application pour mettre à jour / recharger le contenu d'un modèle lors de la navigation entre les vues ou laisser et relancer l'application. Seul le redémarrage semble recharger le modèle tvml.

    Votre modèle se rafraîchera automatiquement chaque fois que vous manipulerez le TVML dans le document modèle.

    Si vous maintenez une référence au document comme suit:

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

    Vous pouvez manipuler le TVML en utilisant myDoc et votre vue changera automatiquement.

    Donc, si votre document modèle comprend une "collectionListe" et que vous devez exécuter ce code:

     //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); } 

    Votre vue ne montrerait plus les éléments UI dans la collection. La vue se rafraîchira le moment où le code sera exécuté.

    Si vous utilisez le framework atvjs , vous pouvez facilement créer et naviguer vers des pages dynamiques qui sont régénérées en naviguant.

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

    La réponse de @shirefriendship m'a montré la bonne direction (merci!). Comme autre exemple, si vous souhaitez modifier le texte d'un seul élément dans un modèle (comme la description), vous devriez utiliser la propriété innerHTML :

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

    Cela modifie immédiatement la description du spectateur.

    Définissez ceci dans l'en-tête de votre API:

    Cache-Control: no-cache

    Vous l'avez depuis Apple Docs: https://developer.apple.com/library/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html

    IMPORTANT

    En servant des fichiers JavaScript et XML à partir de votre serveur Web, vous devez souvent vous assurer que toute modification de vos pages soit toujours visible pour l'application client. Pour ce faire, votre serveur doit s'assurer que le client ne cache aucune des pages. Lorsque votre serveur répond à une demande HTTP pour une page qui ne doit pas être mise en cache, le serveur doit inclure Cache-Control: no-cache dans l'en-tête de réponse HTTP.