Можно ли получить доступ к функциям jquery через библиотеку шаблонов, такую ​​как Handlebars? - PullRequest
2 голосов
/ 02 февраля 2012

Проще всего объяснить вопрос на примере.

У меня есть шаблон руля, определенный на странице HTML:

   <script id="myTemplate" type="text/html">
      <h1>{{fieldname}}</h1>
   </script>

Я отрисовываю шаблон с рулем:

   var source = $("#myTemplate").html();
   var template = Handlebars.compile(source);
   var txt = template(jsonObj);

и txt в конечном итоге содержит визуализированный HTML-текст. Нет проблем.

НО ...

скажем, я получил XML-файл через ajax, и я хотел бы использовать jquery для доступа к нему для визуализации элементов.

Чтобы получить, скажем, значение дочернего элемента «name» из родительского элемента, я мог бы использовать jquery следующим образом:

   $(xml).find('name').text()

Итак, я подумал, что мой шаблон может выглядеть примерно так: (ПРИМЕЧАНИЕ, ЭТО НЕ РАБОТАЕТ!)

   <script id="myTemplate" type="text/html">
      <h1>{{$(this).find('name').text()}}</h1>
   </script>

РЕДАКТИРОВАТЬ: Очевидно, это не работает.

я тоже пробовал

{{this.find('name').text()}}

и даже

{{.find('name').text()}}

Но ничего из этого не работает, и до сих пор я не смог найти ни одну из систем шаблонов JS, где вы могли бы сделать что-то подобное. Похоже, что руль и DUST, скорее всего, смогут это сделать, но мне пока не повезло.

Я видел некоторые признаки того, что я могу преобразовать XML в JSON и просто передать его в качестве контекста, и это действительно может быть единственным способом.

Это проще, чем я это представляю? Невозможно?

EDIT: После более глубокого изучения, похоже, что для Javascript просто нет шаблонного решения, которое бы работало взаимозаменяемо с объектами JSON или XML Dom для контекста данных. Все они, кажется, принимают JSON.

Ооооо ... Я использовал один из многих доступных плагинов jquery для преобразования xml2json и передачи объекта TH в HandleBars, и все работает без проблем.

Единственный трюк, с которым я столкнулся, - это если вы выполняете запрос JQUERY к данным XML, чтобы найти конкретный элемент, вы получаете массив массивов XML dom, даже если результат только 1.

Итак, я должен был сделать что-то вроде:

var txt = template($.xml2json($(xml).find('myelementname')[0]));

И все хорошо.

Я могу открыть еще один вопрос о том, знает ли кто-нибудь о шаблонизаторе Javascript, который принимает объекты json ИЛИ xml dom.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Из документации на руле похоже, что вы можете передать XML в шаблон и использовать Handlebars.registerHelper, чтобы помочь извлечь элемент имени из XML.

var context = { xmlData: xml, body: "I Love Handlebars!" };

<div class="post">
  <div class="body">{{body}}</div>
  <h2>The xml name:{{findName xmlData}}</h2>
</div>

//Register a helper
Handlebars.registerHelper('findName', function (someXML) {
  return someXML.find('name').text();
});
0 голосов
/ 02 февраля 2012

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

Однако вы можете взглянуть на Подчеркните шаблоны из doT js они могут быть вам полезны.

...