> /// Т.к. у нас результатом шаблона будет JSON
Вот это уже почти в цель. В целом мой конкретный юзкейс это решит неплохо, пусть и совсем не так как я хотел. Если же рассматривать проблему более широко (формулировка): Можно ли передать произвольные структурированные данные из шаблона в контроллер - то ответ будет - да, можно - создай шаблон-коллектор данных, там все разбери в JSON как надо и этот JSON можешь уже юзать в контроллере. Так? Я правильно все понял? |
Цитата:
Цитата:
|
> /// Вернёт <div class="hello"></div>
А что значит "вернет"? Вернет вызвавший шаблон, или в контроллер? (я так понял что первый вариант) Вообще, что возвращается в контроллер? Две сущности как обычно 1) результат компиляции (какой-то внутренний пофигу какой формат) 2) результат конечного рендера - строка Так чтоли? |
Я же говорю, SS это язык, который транслируется в JS, как CoffeScript или TypeScript.
Непосредственным результатом работы транслятора является JS файл, грубо говоря - namespace foo - template bar() < .foo Скомпилится в if (typeof foo === undefined) { var foo = {}; } module.exports = foo; foo.bar = function bar() { return '<div class="foo"></div>'; } И дальше мы этот файл подключаем уже в своём JS и работаем с ним как с JS функциями. А вот сами функции в зависимости режима компиляции могут возвращать разные результаты. |
http://codepen.io/kobezzza/pen/zrJNXx
Вот тут для понимания важны 2 строчки: // Компилируем шаблоны Snakeskin.compile(document.getElementById('templates')); // Вызываем наш скомпилированный шаблон, как простую JS функцию document.getElementById('test').innerHTML = demo.helloWorld(); http://codepen.io/kobezzza/pen/GoPNZx А вот тут я продекларировал шаблон, который возвращает не строку, а DocumentFragment. |
> Да. Но разумеется можно генерить что угодно, а не только JSON.
Но на самом деле у нас вот здесь > {contents|json|!html} contents - это объект JS. И в контроллере в моем случае нужен объект JS. Но в текущей реализации понадобится этот объект перегнать в строку (JSON), а потом эту строку перегнать обратно в объект. Внутри шаблона мы вольны оперировать как угодно объектами JS и собрать что угодно из чего угодно. Вот бы это "что угодно" можно было бы в контроллер вытаскивать - это стало бы киллер-фичей, *я гарантирую это* Например: шаблон: .... connector myData ~ // do something with data ~ ~ var myVar = <get something from outer template scope>.someMethod() + something // ..etc ~ ... ~ var bar = <get something from outer template scope>.someMethod() + something // ..etc ~ myVar.foo = bar. ~ ... ~ // do something with data share bar, myVar .... я не знаю синтаксис SS, тильду (~) использовал для того чтобы ничего не делать с тем что за ней - так какие-то манипуляции с данными, которые видеть ни откуда не нужно. Если ничего делать с данными не нужно - можно сразу - share bar, myVar в контроллере: var tpl = ss('my_tpl.ss'); // не знаю как там, но суть ясна var bar = tpl.connectors.myData.bar; var myVar = tpl.connectors.myData.myVar; Коннекторы - это "обратный билет" для данных в контроллер. Конкретно мой юзкейс - я бы сдалал так: 1) Создал бы родительский шаблон для всех постов, в нем бы создал коннектор. 2) В галпфайле в процессе рендера html-файлов всех постов параллельно бы получил данные из всех коннекторов. 3) Профит, нужные данные контроллер получил, дальше как угодно, это же объекты JS. Ну как идея? |
Я думал тебе JSON нужен :)
- namespace contents - include 'posts/*' - template main() - var contents = [] - forEach posts => post ? contents.push({preview: post.preview(), content: post.main()}) /// Явно указываем return, /// чтобы результатом был исходный массив - return contents Цитата:
Цитата:
|
> codepen.io/kobezzza/pen/zrJNXx
> codepen.io/kobezzza/pen/GoPNZx Щикааарно! |
kobezzza, пара вопросов, если не сложно,
по работе с http://codepen.io/ что там нужно нажать чтоб посмотреть результат на полный экран full? и Snakeskin для ie не предназначен? |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 21:13. |