Показать сообщение отдельно
  #74 (permalink)  
Старый 30.10.2012, 12:48
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от kobezzza
Было бы здорово.
Вообще, идея намного шире. Речь об области применения этой либы. Конкретно - в шаблонизаторах.

Данные, скармливаемые в шаблон при рендеринге, могут быть либо view-ориентированными, либо data-ориентированными.

View-ориентированные сложно подготавливать. На каждый конкретный случай приходится писать много view-логики, которую хочется перенести в шаблон. С такими данными работает dust и ему подобные.

С data-ориентированными данными справится не каждый шаблонизатор, либо придется писать кучу проверок в виде конструкций шаблона. Но такие данные проще подготовить программисту, а уже всякие сортировки/группировки делать в шаблоне. Вот как раз в этом случае Collection.js может сделать эту работу лучше, чем "куча проверок в виде конструкций шаблона".

Есть несколько шаблонизаторов, которые позволяют писать JavaScript-выражения для доступа к данным. Например, для получения массива, что бы затем его скормить циклу. Приведу пример для своего шаблонизатора.

var TEN = require('TEN');
var Collection = require('Collection');

var data = [
	{name: 'Andrey', sex: 'male', age: 22},
	{name: 'Sergey', sex: 'male', age: 24},
	{name: 'Ann', sex: 'female', age: 18},
	{name: 'Kate', sex: 'female', age: 21},
	{name: 'Vera', sex: 'female', age: 15},
	{name: 'John', sex: 'male', age: 28},
	{name: 'Paul', sex: 'male', age: 32}
]; // Тут мы сформировали какие-то данные для шаблона, взял из документации

TEN.render('index.xml', new Collection(data));


Ну а в самом шаблоне используем API Collection:

<?xml version="1.0" encoding="UTF-8"?>
<ten:root xmlns:ten="TEN" xmlns="http://www.w3.org/1999/xhtml">
  <!-- Делаем необходимую выборку, так же взято из доки -->
  <ten:each array="this.sort('age').remove(':el.sex == &quot;female&quot; && el.age < 18')" item="user">
    <!-- Выведутся имена совершеннолетних пользователей, отсортированные по возрасту. -->
    <ten:echo data="user.name" />
  </ten:each>
</ten:root>


По-моему выглядит неплохо, не пришлось писать if-ы внутри цикла. Конечно, фильтрация может быть намного сложнее (как показывает практика работы с XSL), и профита будет больше.

Здесь, по-сути, Collection играет роль фильтра, как в Smarty, но намного мощнее.

Надеюсь, теперь понятно насколько тут важна производительность. Так же не менее важны возможности фильтрации, надеюсь в этом плане всё ок.

Что думаешь?
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 30.10.2012 в 12:51.
Ответить с цитированием