2012-04-05 61 views
0

我有一个非常简单的Backbone View,我希望有条件地呈现HTML的某些块。我看到一个行为,在有条件呈现的HTML之后还有一个整数呈现。从我所知道的情况来看,当我使用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 2012-04-06 18:21:28

+0

在这种情况下,模板范围中唯一的东西就是渲染对象(骨干视图)。除此之外,没有传递任何额外的上下文。 这就是说...也许'结束'在骨干视图的上下文是一个辅助函数或什么?我会研究一下。 – 2012-04-08 20:20:41

+0

找不到该路径下的任何根本原因。最后,我将我的应用程序切换回JavaScript并将模板切换到EJS。不是我正在寻找的结果,但至少它是有效的。 – 2012-04-09 17:34:55

回答

0

或者,您可以使用后缀格式。

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

是的,这绝对适用于我可以用这样的单行表达的东西;但是在某些情况下,我会需要有能力做到块。感谢您的建议! – 2012-04-09 17:35:35

0

我有同样的问题。你已经解决了吗?

我认为这是由引起的,如果语句被编译的JS中包含__obj.push()调用。举例来说,在我的剧本,有一段代码

<%- 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 2012-08-16 16:33:18

+0

它是如何解决这个问题和为什么?像这样的事情让我发疯。 – 2014-07-01 06:35:32