【问题标题】:Force view to reload tvml content on Apple TV/tvos强制视图在 Apple TV/tvos 上重新加载 tvml 内容
【发布时间】:2015-11-04 21:20:44
【问题描述】:

我一直致力于为 Apple TV 上的 tvOS 应用动态生成 tvml 模板,其中包含非常频繁更改的内容。生成模板工作正常,但是在视图之间来回导航或离开并重新进入应用程序时,我无法让应用程序更新/重新加载模板的内容。只有重新启动似乎会重新加载 tvml 模板。

【问题讨论】:

    标签: javascript tvos apple-tv tvml


    【解决方案1】:

    每当您在模板文档中操作 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 元素。代码运行时视图会自行刷新。

    【讨论】:

    【解决方案2】:

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

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

    这会立即将描述更改给查看者。

    【讨论】:

      【解决方案3】:

      如果您使用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');
      

      【讨论】:

        【解决方案4】:

        在 API 的标头中设置:

        缓存控制:无缓存

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

        重要

        从您的网络服务器提供 JavaScript 和 XML 文件时,您经常 需要确保您的页面的任何更改始终可见 客户端应用程序。为此,您的服务器必须确保客户端 不缓存任何页面。当您的服务器响应 HTTP 请求不应缓存的页面,服务器应 在 HTTP 响应标头中包含 Cache-Control:no-cache。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多