通過this question我學會了一種聰明的技巧,只在特定頁面上包含外部腳本。只在某些動作中啓用js功能
但我知道遇到後續問題:引用該腳本的函數(包含在//= require_tree .
中)在所有其他頁面(其中未包括外部腳本)導致錯誤。
在Rails中,我可以放置一個函數(或者我怎樣編寫它),其引用的外部腳本只包含在將要使用的那些頁面(操作)中,以便它不會在所有其他網頁?
通過this question我學會了一種聰明的技巧,只在特定頁面上包含外部腳本。只在某些動作中啓用js功能
但我知道遇到後續問題:引用該腳本的函數(包含在//= require_tree .
中)在所有其他頁面(其中未包括外部腳本)導致錯誤。
在Rails中,我可以放置一個函數(或者我怎樣編寫它),其引用的外部腳本只包含在將要使用的那些頁面(操作)中,以便它不會在所有其他網頁?
不需要在視圖中檢查控制器和操作。 將控制器和動作添加到您的身體標記中。 然後在您的JavaScript代碼中,使用if條件來檢查這些屬性並運行腳本。
這可能不是最優雅(或高效)的方式,但是在這種情況下,我檢查控制器和操作,然後在我的佈局中添加javascript_include_tag
。示例:
<% if :controller == 'maps' && :action == 'show' %>
<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js" %>
<% end %>
是的,那是外部腳本。但問題是如何最好地處理調用該腳本的函數,因爲如果我將它放在資產管道樹中的所有其他函數中,它將嘗試在所有頁面上調用該腳本,並在它不找到它... –
還有gem
Paloma在Rails中處理特定頁面javascripts
。
快速例如:
The javascript callback file /assets/javascripts/paloma/users/new.js: Paloma.callbacks['users']['new'] = function(params){ // This will only run after executing users/new action alert('Hello New Sexy User'); }; The Rails controller app/controllers/users_controller.rb: def UsersController < ApplicationController def new @user = User.new # No special function to call, the javascript callback will be executed automatically # just for this specific action. end end
有趣的是,在一個具有更多功能的項目中,我可以看到這非常有用。 –
好吧,那麼請考慮upvote我的答案,如果它對你有用:) – mark10
我一直在尋找答案的問題,以及在相當一段時間。
最後,我意識到:
我喜歡的資產管道,我不希望處理處置資產的自己。所以我嘗試儘可能我可以有我所有的js文件與資產管道
使用content_for處理是非常方便的JS的包括塊,其中只需要在特定的觀點:
上佈局文件(佈局/ application.html.erb)做
<%= yield :scripts %>
的<head>
標籤內
那麼您的具體看法寫
<% content_for :scripts do %>
<script>
you js code goes here regularly
</script>
<% end %>
那麼Rails會知道採取該位,並將其放置在:腳本 這將確保您的JS位被加載,只有當你真正需要它們
如果其特定的文件,你想:
將這些文件放在assets/javascripts下的文件夾中。讓我們把它叫做Others
在Others
地方yourjs.js
文件,並在application.js
清單不包括樹
現在,鏈輪不參與Others
的文件。
然後你可以用上面的方法與content_for
包括特定文件
<% content_for :scripts do %>
<%= javascript_include_tag "Others/yourjs.js" %>
<% end %>
是的,那個作品: 'if($('body.posts.show')。length> = 1){function myFunction()}' 但是,Web控制檯仍然顯示相同錯誤消息,但它只閃爍它,只是一瞬間。爲什麼當運行它的條件失敗時,它會注意到這個函數? –
只需使用if($('body.posts.show')。length {})。有些東西是關閉的= =我 – TheIrishGuy