Цитата:
2) Список транзакций? Я просто не успел это добавить, будет в версии 3.8.5 на этой недели уже наверно) |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Данные, скармливаемые в шаблон при рендеринге, могут быть либо 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, но намного мощнее. Надеюсь, теперь понятно насколько тут важна производительность. Так же не менее важны возможности фильтрации, надеюсь в этом плане всё ок. Что думаешь? |
Цитата:
Я как то от таком подходе даже не думал, и когда реализовал поддержку шаблонов в самом Collection исходил из логики: сначала данные готовятся, потом показываются (т.е. 2 прохода), а тут можно сделать в один. |
Цитата:
|
koobezzzza - нет не транзакциии :)
Я говорю о взаимодействии с сервером. допустим хотим написать грид с возможностью удаления, редактирывания, и создания записей, все изменения сохраняются по кнопки save. возьмём 4 типовых операций для взаимодействия, СRUD create - создание новых записей read - чтение записей update- обновление записей delete - удаление записей. допустим пользователь понасоздавал, редактирывал и удалял записи а теперь нажал save я должен вызвать 3 серверных комманды. 1) выбрать из твоей базы все вновь созданные пользователем записи, эту инфу отправим допусти на www.myapp.ru/test/create.php 2) выбрать из твоей базы все записи которые пользователь редактирывал хоть однажды, и бередать их команде www.myapp.ru/test/update.php. Надеюсь ясно что те которые пользователь нередактирывал передавать нет необходимости 3) выбрать все те записи которые пользователь удалил и передать их на сеbрвер допустим в www.myapp.ru/test/delete.php. впрочем можно упростить взаимодействие с сервом и свести всё к двум командам load и save для save придётся отправить файл вида { create:[],//список записей подлежащих созданию update:[],//список записей подлежащих обновлению delete:[]//список полей подлежащих удалению } тоесть в твоей либе должно быть что-то вроде метода getCRUD который вернёт {create:[], update:[], delete:[] } для простоты примера будем считать что в бд будет что то вроде [ {id:1,name:"lala"}, {id:2,name:"lala"} ] ЭТО МОЁ 666е СООБЩЕНИЕ ))) |
DjDiablo ну как вариант можно на каждое действия пользователя слать запрос, но ето не тру:)
Твою идею я понял, действительно нужная штука, так что добавлю. Цитата:
|
> твои посты я буду тупо игнорить
слив засчитан > сразу видно джукверист, ибо только джукверисты пихают в проект десяток и более всяких говноплагинов для джуквери не угадал > В зависимости от проектов приходиться делать не только приятные глазу вещи. а дело не в приятности глазу или привычности. есть такая вещь как "поддерживаемость", на проблемы с которой я и указал. > если я правильно понял то только один метод можно повесить на onSort, если да то печально вешаем на onSort какой-нибудь EventRouter и проблема решена) > Я понятия не имею что там нужно на подключать или что за проект должен быть что бы юзать такое огромное количество скриптов. сложный проект + сжатые сроки = максимальное использование готового кода. и так уж получается, что каждая библиотека пытается быть швейцарским ножом. хорошо хоть поиск элементов по css селектору выносят на попечение фреймворков. |
B~Vladi, смешивать трансформацию модели (из дата ориентированной во вью ориентированную) и шаблонизацию - плохая идея.
фактически не данные нужно преобразовывать в хтмл, а нужно создать модель представления, которая: 1) выберет из базы то, что ей нужно (это может быть выборка как из Collection, json, xml так и запрос к серверу, если данных дофига) 2) отрендерит себя в json/html/dom или куда там ещё надо смешивать эти два процесса - это классно лишь на простеньких демо-примерах. вот что ты будешь делать, когда потребуется рядом со списком совершеннолетних пользователей вывести рядом список несовершеннолетних? у тебя будет 2 шаблона отличающихся лишь запросами данных (привет, копипаста). будет 2 отдельные выборки из базы (привет, тормоза). в то время как логика подсказывает, что эффективней было бы один раз пройтись по массиву, раскидав записи по двум одинаковым моделям и отрендерить их одним же шаблоном. |
Часовой пояс GMT +3, время: 00:47. |