Сообщение от 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 == "female" && el.age < 18')" item="user">
<!-- Выведутся имена совершеннолетних пользователей, отсортированные по возрасту. -->
<ten:echo data="user.name" />
</ten:each>
</ten:root>
По-моему выглядит неплохо, не пришлось писать if-ы внутри цикла. Конечно, фильтрация может быть намного сложнее (как показывает практика работы с XSL), и профита будет больше.
Здесь, по-сути, Collection играет роль фильтра, как в Smarty, но намного мощнее.
Надеюсь, теперь понятно насколько тут важна производительность. Так же не менее важны возможности фильтрации, надеюсь в этом плане всё ок.
Что думаешь?