我的Rails應用程序使用谷歌地圖。我想用標記使用.js.erb文件填充它,以便我可以訪問JavaScript中的ruby變量。我不想使用坤寶石。調用.js.erb文件而不是.html.erb
有沒有辦法讓動作調用.js.erb文件而不是.html.erb文件?
解決此問題的一個方法是加載.html.erb,然後必須執行自動ajax調用以加載.js.erb,但我正在尋找更好的解決方案。
謝謝。
我的Rails應用程序使用谷歌地圖。我想用標記使用.js.erb文件填充它,以便我可以訪問JavaScript中的ruby變量。我不想使用坤寶石。調用.js.erb文件而不是.html.erb
有沒有辦法讓動作調用.js.erb文件而不是.html.erb文件?
解決此問題的一個方法是加載.html.erb,然後必須執行自動ajax調用以加載.js.erb,但我正在尋找更好的解決方案。
謝謝。
控制器真的不是正確的方法,因爲它的工作是響應請求。如果有請求進入,並希望返回HTML,則Rails將返回HTML。如果這是一個JS請求,它會發回JS。
正確的做法是使用HTML加載頁面,然後通過頁面進行AJAX調用。你甚至可以將它發送給相同的動作,並且Rails將使用適當的js.erb模板進行響應。如果你想給它特別的指示,也許如果你想以特定的方式渲染你的JSON,你可以用respond_to
或JBuilder gem來做到這一點。
編輯:上面的代碼假設您正在通過普通的HTML請求加載頁面,並且您希望它同時執行HTML和JS。如果您已經在一個頁面上,並且想要通過鏈接,按鈕或表單完成AJAX調用,而無需呈現HTML,則可以通過將remote: true
添加到任何form_for
,form_tag
,button_to
或link_to
標籤來實現。
如果你想避免第二次調用,也不希望你的控制器需要用JSON響應,你可以將你正在查找的數據放入HTML5數據屬性中。這些專門用於向JS提供信息的目的。你可以將它的值設置爲一個包含標記的數組,然後讓你的腳本遍歷該數組的每個元素。
你的建議是我迄今爲止所做的(請參閱上面的問題),但我想知道是否有另一種方法可以避免兩個單獨的服務器調用。我正在考慮在我的.html.erb中放置一個<%render'XXX.js.erb'%>來調用.js.erb文件,但沒有奏效。 – user2725109