I have a pretty simple Backbone View that I'd like to have render some blocks of HTML conditionally. I'm seeing a behavior where following the conditionally rendered HTML there is a integer rendered as well. From what I can tell, it seems to happen when I use the end
statement to terminate a conditional block.
Here's some code that is demonstrating the error for me:
<% if true: %>Hello World!<% end %>
I would expect this to renderHello World!
into the containing element. However, it's actually rendering Hello World!2
.
If I add several of blocks in the same template:
<% if true: %>Foo, <% end %>
<% if true: %>Bar, <% end %>
<% if true: %>Baz<% end %>
I would expect this to render Foo, Bar, Baz
into the containing element. However, it's actually rendering Foo, 2 Bar, 5 Baz8
. After running a somewhat larger set of them, it seems the integer being printed goes up by 3 every time. From reading over the gem's README I can't see anything I'm doing wrong.
Any help would be much appreciated!
I have the same problem. Have you solved it already?
I think it's caused by if statements being wrapped in
__obj.push()
calls in the compiled JS. For example, in my script, there is a piece of codewhich gets compiled to
If I understand it correctly, it means that it will first push the
\n
, the result of the function, another\n
to the output. But the lastpush
(line 4) will return number of the elements in the array, which will be in turn pushed to the array itself by the outerpush
(line 1).I've tried to change the
Array.prototype.push
to return something else, but it seems that messes things even more (since it's a core function).Alternatively you could use the postfix format.