2016-06-09 63 views
0

我有一個關於約定和最好的辦法在軌道做事情的小問題。[RAILS] [Javascript]在javascript中使用控制器變量是否「乾淨」?

現在爲一個視圖我需要獲得一個散列數組,我可以在我的控制器中更輕鬆地構建方法。我需要這個ARRY我的javascript代碼...

所以我到目前爲止,我發現了一個解決方案,是不是一個Ajax請求是這一個:

var toto = #{@controller_var.to_json} 

我知道它可能的「更好」做一個Ajax請求或將這個變量存儲在erb代碼中......但我試圖限制自己去做Ajax請求(因爲這個頁面已經做了一些),我不喜歡創建隱藏的字段來存儲我的控制器方法...

無論如何,如果你能就此給出你的意見/建議,我真的會讚賞它! :)

最好的問候!

+0

http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast如何使用railscasts方法?在將值傳遞給您的JavaScript時沒有多少變化我認爲...另外,由於資產編譯,請謹防將您寫入的行寫入JavaScript文件。 –

+0

我沒有完全得到你最後的想法......到目前爲止我的線是在我的HTML(實際上是haml文件)...從我看到別的地方,我明白,如果我把這種代碼放在它自己的JS文件中將不再工作,因爲JS和Rails不溝通Rails和Html文件的方式...... – Naarsh

+0

你在做什麼(把它放在html/haml中)是可以的。由於資產預編譯,將它放入js文件並不好,但你似乎做得對。 –

回答

1

這種方法的主要問題是您的javascript現在與rails緊密耦合,並且無法在沒有完整的rails服務器運行的情況下進行隔離測試。

我完全避免服務器生成的JavaScript出於這個原因。

即使你不走全面的方式,並建立了一個API驅動的客戶端應用程序,你至少可以做的是一個DOM元素注入JSON:

<script id="toto" type="application/json"> 
    <%= @controller_var.to_json %> 
</script> 

現在,在您的測試情況下,你可以使用腳本可以包含模擬數據的靜態HTML頁面。

另一個問題是,你不能通過CDN服務器生成的JavaScript。這不是一個問題,如果你的js響應非常小,但現在與頁面上存在的JavaScript交互,你很可能會使用全局變量。

除了全局變量導致代碼不易維護的明顯問題外,限制器和優化器可以執行死代碼消除的程度也會受到很大影響。

+0

我收到你的評論,並感謝你。但個人而言,我並不期望從我的Rails環境中測試我的JS ......考慮到這一點,你是否仍然認爲我的選擇不是最好的? :)順便說一句,我不是想要克服一些罪責或這樣的;) – Naarsh

+0

我已經更新了我的答案與其他參數。請看最後2段。 – lorefnon

+0

非常感謝,我完全可以將你的觀點應用到我目前的狀況中,這是一個很大的幫助! :D – Naarsh

相關問題