Как передать объект или установить переменную в файле шаблона TVML, который я использую?

Я работаю с примерами файлов TVMLCatalog от Apple, и застрял, пытаясь передать объект в файл шаблона, который я загружаю в докладчике (файл javascript). Кажется, что это должно быть совершенно рудиментарной вещью, но это заставило меня победить.

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

resourceLoader.loadResource('http://localhost/mytemplate.xml.js',
                function(resource) {
                    if (resource) {
                        var doc = self.makeDocument(resource);
                        doc.addEventListener("select", self.load.bind(self));
                        navigationDocument.pushDocument(doc);
                    }
                }
            );

Где я могу определить объект или установить переменную, которая будет в документе, когда файл шаблона загружается в представление?

1 ответ

Да! Вы можете добавить переменные в свои шаблоны TVML.

Во-первых, вы должны создать строку, содержащую тот же шаблон TVML, и использовать ${variable} ввести значения. Затем используйте объект DOMParser для преобразования этой строки в элемент XML DOM. Наконец, представьте документ с помощью метода presentModal (основной объект navigationDocument)

Ваша функция будет выглядеть так:

function catalogTemplate(title, firstMovie, secMovie) {
  var xmlStr = `<?xml version="1.0" encoding="UTF-8" ?>

   <document>
   <catalogTemplate>
  <banner>
   <title>${title}</title>
 </banner>
  <list>
 <section>
  <listItemLockup>
  <title>All Movies</title>
 <decorationLabel>2</decorationLabel>
 <relatedContent>
  <grid>
  <section>
 <lockup>
  <img src="http://a.dilcdn.com/bl/wp-content/uploads/sites/2/2014/03/Maleficent-Poster.jpg" width="250" height="376" />
  <title>${firstMovie}</title>
  </lockup>
  <lockup>
  <img src="http://www.freedesign4.me/wp-content/gallery/posters/free-movie-film-poster-the_dark_knight_movie_poster.jpg" width="250" height="376" />
  <title>${secMovie}</title>
  </lockup>
  </section>
  </grid>
  </relatedContent>
  </listItemLockup>

  </section>
 </list>
  </catalogTemplate>
 </document>`

  var parser = new DOMParser();
  var catalogDOMElem = parser.parseFromString(xmlStr, "application/xml");
  navigationDocument.presentModal(catalogDOMElem );
}

PS: я использовал шаблон каталога в качестве примера. Вы можете использовать любой шаблон

В функции onLaunch вы можете вызвать функцию catalogTemplate, передав любую переменную.

App.onLaunch = function(options) {    
catalogTemplate("title", "Maleficent.", "The Dark knight");
}

Вы можете добавить слушателя и передать функцию, чтобы перейти на другую страницу или запустить действие, используя addEventListener

function catalogTemplate(title, firstMovie, secMovie, cb) {
  var xmlStr = `<?xml version="1.0" encoding="UTF-8" ?>
 <document>
   <catalogTemplate>
  <banner>
   <title>${title}</title>
 </banner>
  <list>
 <section>
  <listItemLockup>
  <title>All Movies</title>
 <decorationLabel>2</decorationLabel>
 <relatedContent>
  <grid>
  <section>
 <lockup>
  <img src="http://a.dilcdn.com/bl/wp-content/uploads/sites/2/2014/03/Maleficent-Poster.jpg" width="250" height="376" />
  <title>${firstMovie}</title>
  </lockup>
  <lockup>
  <img src="http://www.freedesign4.me/wp-content/gallery/posters/free-movie-film-poster-the_dark_knight_movie_poster.jpg" width="250" height="376" />
  <title>${secMovie}</title>
  </lockup>
  </section>
  </grid>
  </relatedContent>
  </listItemLockup>

  </section>
 </list>
  </catalogTemplate>
 </document>

`
  var parser = new DOMParser();
  var catalogDOMElem = parser.parseFromString(xmlStr, "application/xml”);

 catalogDOMElem.addEventListener("select", cb, false);

  navigationDocument.presentModal(catalogDOMElem );
}

Давайте создадим еще один шаблон, чтобы продемонстрировать, как мы переходим на другую страницу, выбирая определенный элемент.

function ratingTemplate(title) {
  var xmlStr = `<?xml version="1.0" encoding="UTF-8" ?>
  <document>
    <ratingTemplate>  
<title>${title}</title>
<ratingBadge value="0.8"></ratingBadge>
</ratingTemplate>
  </document>`
  var parser = new DOMParser();
  var ratingDOMElem = parser.parseFromString(xmlStr,"application/xml");
  navigationDocument.presentModal(ratingDOMElement);
}

В нашей функции onLaunch.

App.onLaunch = function(options) {    

catalogTemplate("title", "Maleficent.", "The Dark knight", function() {
        navigationDocument.dismissModal();

        ratingTemplate(“rating template title")

    });
}

Проверьте этот список для получения дополнительных уроков.

Другие вопросы по тегам