2012-07-10 27 views
3

我有一個遠程命中的控制器,之後我的controller_action.js.erb文件運行。在條件.js.erb文件中使用控制器設置變量

在我的控制器的操作中,我設置了一個變量@successful = true|false(true | false基於函數的返回值)。

在我的JavaScript文件中,我想說if @successful,並提醒操作成功或警告它不是。

任何想法如何做到這一點?

回答

1

我說HAML一般,所以這可能不是完全正確的:

if(<%= @successful %>) { 
    // do stuff 
} else { 
    // do other stuff 
} 

在HAML,這將是:

:javascript 
    if(#{@successful}) { 
    // do stuff 
    } else { 
    // do other stuff 
    } 

或者,你可以這樣做:

( ERB)

<%- if @successful %> 
    // JS code if true 
<%- else %> 
    // JS code if false 
<%- end %> 

(HAML)

- if @successful 
    :javascript 
    // JS code if true 
- else 
    :javascript 
    // JS code if false 

第一個選項將始終呈現在客戶端上所有的JS代碼,唯一的區別是,如果truefalseif子句。

第二個選項將有條件地呈現真或假情況下的JS代碼。

+0

正確答案就在於此響應。第一個代碼塊完美工作。如果你能刪除多餘的東西,你有最好的答案。 – finiteloop 2012-07-10 21:55:40

+0

很多人使用HAML而不是ERB,似乎很有用,請留下它。有什麼不正確的我應該刪除/編輯,或者您認爲HAML是多餘的一個原因? – Raphael 2012-07-11 21:44:37

+0

我在第二種方法中增加了ERB,並解釋了兩種方法之間的區別。 – Raphael 2012-07-11 21:53:01

2

試試這個

<%- if @successful %> 
    alert('Blabla'); 
<%- else %> 
    alert('Blabal'); 
<%- end %> 
+0

對不起,raphaelcm先在那裏有正確的答案。這是大部分是正確的,但有點難看,因爲你使用rails而不是javascript。 「<% - 」與「<%=」有什麼不同?我從未見過前者。 – finiteloop 2012-07-10 21:57:21

+0

'<% - '不會顯示任何輸出,而'<%='會。 – Raphael 2012-07-11 21:47:13

+0

我認爲不渲染輸出你只是使用'<%'是與'<% - '同義的嗎? – finiteloop 2012-07-11 23:44:40