2012-04-05 3 views
0

У меня довольно простой вид на макроблоке, который я бы хотел обработать с помощью некоторых блоков HTML. Я вижу поведение, которое, следуя условно визуализированному HTML, также содержит целое число. Из того, что я могу сказать, это происходит, когда я использую оператор end для завершения условного блока.Eco template отображает целое число при использовании оператора 'end'

Вот код, который демонстрирует ошибку для меня:

<% if true: %>Hello World!<% end %> 

Я бы ожидать, что это делает Hello World! в вмещающем элемент. Тем не менее, это на самом деле рендеринг Hello World!2.

Если добавить несколько блоков в одном шаблоне:

<% if true: %>Foo, <% end %> 
<% if true: %>Bar, <% end %> 
<% if true: %>Baz<% end %> 

Я бы ожидать, что это делает Foo, Bar, Baz в вмещающем элемент. Тем не менее, это на самом деле рендеринг Foo, 2 Bar, 5 Baz8. После запуска несколько большего набора из них кажется, что целое число печатается на 3 раза каждый раз. От чтения над камнем README Я не вижу ничего, что я делаю неправильно.

Любая помощь была бы высоко оценена!

+0

Вы передаете переменную конце значение в шаблон? Это может как-то переписать функциональные возможности по умолчанию. – abraham

+0

В этом случае единственным объектом, который будет в области шаблона, будет объект рендеринга (вид Backbone View). Это не передается какой-либо дополнительный контекст, кроме этого. Это сказано ... может быть, 'end' в контексте Backbone View является вспомогательной функцией или чем-то еще? Я займусь этим. –

+0

Не удалось найти причину этого пути. В итоге я переключил свое приложение обратно на JavaScript и шаблоны в EJS. Не результат, который я искал, но, по крайней мере, он работает. –

ответ

0

В качестве альтернативы вы можете использовать формат постфикса.

<%= "Hello World!" if true %> 
+1

Да, это определенно работает для вещей, которые я могу выразить в одной строке; но я бы в некоторых случаях нуждался в способности делать блоки. Спасибо за предложение! –

0

У меня такая же проблема. Вы уже решили это?

Я думаю, что это вызвано , если операторов, обернутых в __obj.push() вызовов в скомпилированном JS. Например, в моем сценарии, есть кусок кода

<%- if [email protected]: %> 
    <%- to_html(@create_link('c', @session['course'])) %> 
<%- end %> 

, который компилируется в

[1] __out.push(!this.blok ? 
[2] (__out.push('\n '), 
[3] __out.push(to_html(this.create_link('c', this.session['course']))), 
[4] __out.push('\n ') 
[5] ) : void 0) 

Если я правильно понимаю, это означает, что он будет первым толкать \n, результат функция, другая \n к выходу. Но последний push (строка 4) вернет число элементов в массиве, которое, в свою очередь, будет перенаправлено на сам массив внешним push (строка 1).

Я попытался изменить Array.prototype.push, чтобы вернуть что-то еще, но кажется, что беспорядок еще больше (поскольку это основная функция).

+1

Установка Node.js решила проблему. – phoeniks

+0

Как это решить проблему и почемуyyyyyy ?! Такие вещи приводят меня в замешательство. –

Смежные вопросы