Цитата:
Цитата:
1. На объекте пространства имен шаблонизатора генерируется ошибка: { message: 'ReferenceError: data is not defined', templatePath: 'путь к шаблону', TypeError: 'RenderError', nodeName: 'имя тега', line: 'номер строки', char: 'позиция символа, с которого начинается тег' } 2. Тег со всем содержимым не попадает в результат. 3. Если использовать опцию конфига debug - true, на месте тега будет сгенерирован html-код: <h3>RenderError:<br /> ReferenceError: data is not defined<br />Template: templates\page.xml<br />Node name: if<br />Line: 30<br />Char: 2</h3> Цитата:
1. Запрос передается в сервис. 2. Сервис валидирует запрос и вызывает подходящий шаблон. Цитата:
Цитата:
Цитата:
Всё-таки есть некий предел. В PHP его нет. Цитата:
Цитата:
|
Цитата:
Представь обычную рабочую ситуацию: пришел таск убрать некий блок. У нас сейчас достаточно скинуть задачу на верстака и он всё сделает. А так придется напрягать как верстака так и кодера. Круто? Я считаю что нет. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Кроме того, следующий момент остался без примера: Цитата:
|
Цитата:
TEN.on('error', function () {}); Какие сайчас могут быть ошибки на этапе шаблонизации: 1. Ошибки выполнения шаблона. Типо из JS-выражения обращаемся к неизвестной переменной. Такие ошибки обрабатываются на том уровне, из которого вызывается шаблон для рендеринга, что логично. Некорректный кусок шаблона вместе со своим содержимым не выводится (или выводится отладочная инфа) и при этом никак не влияет на выполнение остального. К этим ошибкам так же относятся исключения, выкидываемые методами получения данных (ручка). 2. Ошибки получения данных. Типо: Цитата:
Эти ошибки так же могут быть обработаны на уровне логики получения этих данных. Цитата:
Цитата:
Если бы задача стояла как: "выпилить такой-то блок со всего сайта", кодер выпилил бы ручку. Кодеру в любом случае как минимум нужно посмотреть таск. Если он хорошо знает систему, то сходу было бы ясно - выпиливать ручку или нет. Цитата:
Цитата:
Цитата:
Как я вижу рабочую ситуацию, используя мой подход с активными шаблонами: Пришел таск: "вывести список online-пользователей". Таск переводится руководителем на кодера. Кодер реализует метод getOnline. В комментах к таску пишет: "Дернуть метод getOnline. Принимает аргументы: (бла бла), возвращает параметры: (бла бла)." и переводит на верстака. Верстак пишет в шаблоне: <ten:query method="getOnline" arguments="" params="error, data"> <ten:if expr="data"> <!-- обработка data --> </ten:if> </ten:query> Где тут много кода? Не намного больше чем в пассивном шаблоне. Если придет задача вывести этот блок на другую страницу, кодер, зная что уже есть такой метод, перекинет таск сразу на верстака. Совершенно не задумываясь куда его нужно вставить. Как тебе такой сценарий? Можно работать? |
Какая-то у тебя странная категоризация ошибок: "К этим ошибкам [парсинга] так же относятся исключения, выкидываемые методами получения данных (ручка)." Какого плана исключения?
Цитата:
Кого кому жалко... не думаю, что это способствует конструктивному обсуждению... А у php как шаблонизатора не большие недостатки (как для меня): 1) невозможно наследование шаблонов, 2) нереализуема защита от дурака, ну и от ошибок типа "забыл проэкранировать переменную". Знаешь, был какой-то период когда я возлагал слишком большие надежды на них (шаблонизаторы), а потом пришло понимание, что native php ни чем не хуже большинства существующих, а то и лучше. Ну и не только у меня так было. Наверное это был акт массового слабоумия :) Цитата:
Цитата:
Цитата:
Цитата:
Как я говорил, я бы разделил контент на основной (то, что соответствует url) и дополнительный (всякие top10, баннеры, меню, наверное). Данные из url должны передаваться пассивным методом, из контроллера в шаблон, а остальное можно и активным. При этом шаблон в любом случае состоит из активной части, которая получает нужные данные либо от контроллера, либо сама, из модели, и подготавливает их для отображения. И пассивной, которая рендерит данные. Первое давай назовем вид, второе - шаблон. Цитата:
<ten:query method="getOnline" arguments="" params="error, data"> <ten:if expr="data"> <!-- обработка data --> </ten:if> </ten:query> {{#online_users}} {{/online_users}} но я говорю в первую очередь не о том, что его больше, а что он неудобно записан. Потому что в твоем шаблоне рендеринг смешивается с кодом. Т.е. сложнее понять, что должно отрендериться. Потому что это для тебя менее приоритетная цель, чем чтобы-кодера-не-отвлекали-по-пустякам. Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
<ten:context object="online_users()"> </ten:context> Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Код:
f(1, 2, 3) <call function="f"> <arg value="1"> <arg value="2"> <arg value="3"> </call> :) Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Вызвал функцию с аргументом - числом. Функция ожидала строку. Либо функция сама падает (например, пытается применить к аргументу метод строки), либо она проверяет тип и выкидывает исключение. Т.е. это то же самое, что и ошибка программиста, о которой ты писал выше. Что касается ошибок обращения к ресурсам. Сами обращения происходят в недрах логики метода, вызываемого из шаблона, правильно? В ноде принято в callback первым параметром прокидывать объект ошибки, если это имеет место быть. Так вот, допустим в недрах этого метода возникла ошибка обращения к ресурсу и логика метода это отловила. Метод может передать в callback этот объект и уже в шаблоне на уровне разметки это обработается. Пример: <ten:query method="getOnline" params="error, data"> <ten:if expr="error"> <!-- произошла ошибка доступа к ресурсам или ещё что --> <ten:else if="data" /> <!-- всё ок, пришли данные, обрабатываем их --> </ten:if> </ten:query> Если ты про это говорил, то всё разделено. Если нет - расскажи на примере что ты имел ввиду. Цитата:
Тем более, в том же Dust можно вызывать функции и обрабатывать от них результат. Логика таких конструкций ничем не отличается от моего шаблонизатора (см. пример с query, context), кроме синтаксиса самих конструкций. Цитата:
Цитата:
Цитата:
А, я понял. Тебе нравятся шаблоны типа: Код:
<% for (var i; i < array.length; i++) { %> Цитата:
Цитата:
Цитата:
Если не использовать некоторые конструкции в моем шаблонизаторе, то он ничем не будет отличаться от Mu или Dust. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
2) моя религия (читабельность, разделение обязанностей) ни чем не хуже твоей (по-меньше дергать кодера); 3) у меня складывается впечатление, что ты все что я говорю (по-крайней мере в последнее время) ты списываешь на религию, это так? Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
да, давай приведу пример: Пример: 1.xml
<?xml version="1.0" encoding="UTF-8"?> <ten:root xmlns:ten="TEN" xmlns="http://www.w3.org/1999/xhtml"> <ten:block> <ten:query method="getOnline" params="error, data"> <ten:each object="data" item="user"> <ten:echo data="user.name" /> </ten:each> </ten:query> </ten:block> </ten:root> и как-нибудь так: Пример: 1.mustache
{{#onlineUsers}} {{name}} {{/onlineUsers}} Пример: 1.js
this.onlineUsers = getOnline(); |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Общую суть твоей религии я понял, остается только понять чем она лучше и что она дает как кодеру так и верстаку. Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 12:45. |