Лучший способ обработать строку результатов без использования шаблонов Jquery - PullRequest
2 голосов
/ 15 марта 2011

Я использую шаблоны JQuery и хочу сгенерировать одну строку с надписью «результаты не найдены», если в массиве, который отправляется в шаблон, нет результатов.Теперь я справляюсь с двумя шаблонами: один выводит строки, а другой выводит экземпляр для экземпляра без строк, но мне это кажется грязным.Есть ли лучшие способы справиться с этой ситуацией?

if(results.length == 0)
   $( "#NoRowsTemplate" ).tmpl( results ).appendTo("#tableid")
else
   $( "#HasRowsTemplate" ).tmpl( new Array(1)).appendTo("#tableid")

Вот пример шаблона со строками:

<script id="HasRowsTemplate" type="text/x-jquery-tmpl">
<tr>
<td>${name}</td>
</tr>
</script>

А вот пример шаблона без строк:

<script id="NoRowsTemplate" type="text/x-jquery-tmpl">
<tr>
<td>No Rows Were Found</td>
</tr>
</script>

Ответы [ 2 ]

5 голосов
/ 15 марта 2011

Вы можете использовать {{if}} и {{else}}.

Трудно сказать больше, не видя рассматриваемый шаблон.

Обновление:

Хорошо, вы опубликовали несколько примеров, чтобы я мог сказать больше сейчас.Прежде всего, где остальная часть вашего стола?Почему его нет в шаблоне?Сырье добавляется к существующей таблице, но я предполагаю, что это делается только один раз, потому что в противном случае вы бы не добавили сообщение «Строки не найдены», но вы бы заменили существующее содержимое.

СначалаВ этом конкретном случае вы можете использовать быстрый взлом и просто использовать:

if (results.length === 0) {
    results = ["No Rows Were Found"];
}
$( "#NoRowsTemplate" ).tmpl( results ).appendTo("#tableid");

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

$( "#newTemplate" ).tmpl({ results: results }).appendTo("#tableid");

с этим новым шаблоном:

<script id="newemplate" type="text/x-jquery-tmpl">
  {{if results.length}}
    {{each results}}
      <tr>
        <td>${value}</td>
      </tr>
    {{/each}}
  {{else}}
    <tr>
      <td>No Rows Were Found</td>
    </tr>
  {{/if}}
</script>

, и я бы также добавил оставшуюся часть таблицы HTML в самое начало и в конецэтого шаблона.

1 голос
/ 15 марта 2011

Один из вариантов - заключить массив в анонимный объект, чтобы шаблон не вызывался для каждого элемента в массиве, тогда вы можете использовать условный оператор ({{if}}) для проверки длины и использовать {{each}} перебирать предметы.

Итак, передайте это как: $("#Template").tmpl({ items: results }).appendTo("#tableid")

...