Rails'i harika kılan önemli özellikleri kaybettiğiniz için JS veya CSS dosyalarınızı varlık kanalının dışına yüklememelisiniz. Ve başka bir mücevhere ihtiyacınız yok. Mümkün olduğunca az sayıda taş kullanmaya inanıyorum ve burada bir mücevher kullanmak gerekli değil.
Ne "Denetleyiciye Özel Javascript" ("Eylem Belirli Javascript altta bulunur) olarak bilinir Bu belirli bir KONTROLÖR için belirli bir JavaScript dosyası yüklemenizi sağlar .. Javascript bir görünümüne bağlamaya çalışıyorum tür .. MVC tasarım modelini takip etmez ve onu Kontrolörlerinizle veya Kontrolörlerinizdeki eylemlerle ilişkilendirmek istersiniz.
Ne yazık ki, herhangi bir nedenle, Rails devs varsayılan olarak her sayfanın varlık dizininizde bulunan her JS dosyasını yükleyeceğine karar verdi. Neden bunu varsayılan olarak "Denetleyici Özel Javascript" etkinleştirmek yerine yapmaya karar verdim asla bilemeyeceğim. Bu, varsayılan olarak aşağıdaki kod satırını içeren application.js dosyası aracılığıyla yapılır:
//= require_tree .
Bu yönerge olarak bilinir . Zincir dişlileri varlıklar / javascripts dizinindeki her JS dosyasını yüklemek için kullanır. Varsayılan olarak, zincir dişlileri application.js ve application.css dosyalarını otomatik olarak yükler ve requir_tree yönergesi her JS ve Coffee dosyasını ilgili dizinlerine yükler.
NOT: İskele yaptığınızda (iskele değilseniz, şimdi başlamak için iyi bir zamandır), Rails sizin için o iskele denetleyicisi için otomatik olarak bir kahve dosyası oluşturur . Bunu bir oluşturmak istiyorsanız standart JS yerine dosyayı kahve dosyası, daha sonra kaldırmak kahve mücevher sizin varsayılan olarak etkindir Gemfile ve JS yaratacak sizin iskele yerine dosyaları.
Tamam, bu yüzden "Denetleyiciye Özel Javascript" i etkinleştirmenin ilk adımı , request_tree kodunu application.js dosyanızdan kaldırmak, VEYA hala global JS dosyalarına ihtiyacınız varsa, varlıklar / javascripts dizininizdeki bir klasöre değiştirmek. IE:
//= require_tree ./global
Adım 2: config / initializers / asset.rb dosyanıza gidin ve aşağıdakileri ekleyin:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
İstediğiniz Denetleyici adlarını ekleyin.
Adım 3: application.html.erb dosyanızdaki javascript_include_tag öğesini bununla değiştirin (params [: controller] bölümünü not edin:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Sunucunuzu yeniden başlatın ve viyola! İskele ile oluşturulan JS dosyası artık yalnızca o denetleyici çağrıldığında yüklenecektir.
IE / makaleler / yeni denetleyicinizdeki belirli bir EYLEM'e belirli bir JS dosyası yüklemeniz mi gerekiyor? Bunun yerine şunu yapın:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config / initializers / asset.rb :
config.assets.precompile += %w(*/*)
Ardından varlıklar / javascripts klasörünüze denetleyicinizle aynı ada sahip yeni bir klasör ekleyin ve js dosyanızı içindeki eylemle aynı ada sahip bir yere yerleştirin. Daha sonra bu belirli eyleme yükleyecektir.