TVML / tvOS:从文件中打开模板

时间:2017-08-04 11:53:47

标签: javascript tvos apple-tv tvml

所以我得到了我的application.js,它可以自己加载一个TVML模板。 我想要实现的是,使用ResourceLoader.js打开TestTemplate.xml.js,而不是将其硬编码到application.js中。

毕竟我完成了它不工作。只有在application.js里面我才能看到模板。当我评论以下行时,我得到一个空白屏幕,当我取消它时,我想我的TestTemplate.xml.js无效。我需要做什么,从TestTemplate.xml.js获取我的模板,而不是从application.js中获取。

我遵循了这个指南:https://www.raywenderlich.com/114886/beginning-tvos-development-with-tvml-tutorial

application.js:

var resourceLoader;

App.onLaunch = function(options) 
{
var javascriptFiles = 
[
`${options.BASEURL}js/ResourceLoader.js`,
`${options.BASEURL}js/Presenter.js`
];

evaluateScripts(javascriptFiles, function(success) 
{
 if(success) 
{
  var alert = createAlert("Test Title", ""); //This line 
  Presenter.modalDialogPresenter(alert);
  resourceLoader = new ResourceLoader(options.BASEURL);

  resourceLoader.loadResource(`${options.BASEURL}templates/TestTemplate.xml.js`, function(resource)
  {
   var doc = Presenter.makeDocument(resource);
   Presenter.pushDocument(doc);
  });
}
else
{
  var errorDoc = createAlert("Evaluate Scripts Error", "Error attempting to evaluate external JavaScript files.");
  navigationDocument.presentModal(errorDoc); 
}
 });
}


var createAlert = function(title, description) 
{
  var alertString = `<?xml version="1.0" encoding="UTF-8" ?>
 <document>
  <alertTemplate>
    <title>${title}</title>
    <description>${description}</description>
    <button>
       <text>OK</text>
    </button>
  </alertTemplate>
</document>`
var parser = new DOMParser();
var alertDoc = parser.parseFromString(alertString, "application/xml");
return alertDoc
}

Presenter.js:

var Presenter = 
{
makeDocument: function(resource)
{
    if(!Presenter.parser)
    {
        Presenter.parser = new DOMParser();
    }
 var doc = Presenter.parser.parserFromString(resource, "application/xml");
return doc;
},

modalDialogPresenter: function(xml)
{
    navigationDocument.presentModal(xml);
},

pushDocument: function(xml)
{
    navigationDocument.pushDocument(xml);
},
}

ResourceLoader.js:

function ResourceLoader(baseurl) {
this.BASEURL = baseurl;
}

ResourceLoader.prototype.loadResource = function(resource, callback) {
 var self = this;
 evaluateScripts([resource], function(success) {
if(success) {
  var resource = Template.call(self);
  callback.call(self, resource);
} else {
  var title = "Resource Loader Error",
      description = `Error loading resource '${resource}'. \n\n Try again later.`,
      alert = createAlert(title, description);
  navigationDocument.presentModal(alert);
}
}); 
}

TestTemplate.xml.js:

var Template = function() 
{ 
return `<?xml version="1.0" encoding="UTF-8" ?>
<document>
<catalogTemplate>
  <banner>
    <title>Test Template</title>
  </banner>
   </catalogTemplate>
  </document>`
}

0 个答案:

没有答案