2012-04-05 27 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