Rails css/js 第二次访问页面时未应用
Rails css/js not being applied when visiting page for second time
我正在尝试为我的 rails 应用程序实现选定的插件和日期选择器,但在访问第二个页面时遇到问题(不是页面重新加载,重新加载页面实际上会刷新插件并将它们带回来),插件会很快出现然后消失,就好像它们正在被重置一样。
我试过搜索这个问题,但我在 rails 上没有真正看到任何东西,我认为这与脚本的服务方式和 bootstrap 的 css/js 文件,但我不太确定,也无法确定它。
我的页面加载时也出现 [缓存未命中],如果这有影响的话。
我尝试过的事情:
- 在 application.js 和 application.css
中切换我的需求顺序
- 移动 jQuery 初始化插件直接到 _form.erb.html 页面
- 将 jQuery 移动到 application.js
中的 document.ready
- 删除所说 document.ready(并使用 document.bind)
- 在 document.ready 中使用 setTimeout 作为快速修复,在它们获得 "reset" 后将它们重新设置(这里没有骰子)
- 当我怀疑部分的 js 出于某种奇怪的原因(不是这种情况)覆盖了 .chosen 和 .datepicker 时删除了部分
这是一些代码,我觉得这是我所缺少的愚蠢和简单的东西。
//= require rails-ujs
//= require turbolinks
//= require jquery.min
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
//= require chosen.jquery.min
//= require bootstrap-datepicker
$(document).ready(function(){
$('.chosen').chosen(
{
allow_single_deselect: true,
no_results_text: 'No results matched',
width: '200px'
}
);
$('.datepicker').datepicker();
});
和application.css
/*
*= require_tree .
*= require_self
*= require chosen.min
*= require datepicker
*/
冒犯_form.html.erb
<div class="field">
<%= form.label :customer_id %>
<%# form.text_field :customer_id, id: :order_customer_id %>
<%= collection_select( :order, :customer_id, @customers, :id, :name,{selected: order.customer_id, prompt: false}, { class: 'chosen' }) %>
</div>
<div class="field">
<%= form.label :date %>
<%# form.date_select :date, id: :order_date, class: 'datepicker' %>
<%= form.text_field :date, default: 'Pick a date', class: 'datepicker' %>
</div>
我认为 turbolinks 可以。您可以通过删除 application.js
文件中的 //= require turbolinks
行并重新启动您的应用程序来确认这一点。
如果您的应用程序中确实需要 turbolinks,请查看下面的内容 link 以解决此问题。
Rails 4: how to use $(document).ready() with turbo-links
希望对您有所帮助。
我正在尝试为我的 rails 应用程序实现选定的插件和日期选择器,但在访问第二个页面时遇到问题(不是页面重新加载,重新加载页面实际上会刷新插件并将它们带回来),插件会很快出现然后消失,就好像它们正在被重置一样。
我试过搜索这个问题,但我在 rails 上没有真正看到任何东西,我认为这与脚本的服务方式和 bootstrap 的 css/js 文件,但我不太确定,也无法确定它。
我的页面加载时也出现 [缓存未命中],如果这有影响的话。
我尝试过的事情:
- 在 application.js 和 application.css 中切换我的需求顺序
- 移动 jQuery 初始化插件直接到 _form.erb.html 页面
- 将 jQuery 移动到 application.js 中的 document.ready
- 删除所说 document.ready(并使用 document.bind)
- 在 document.ready 中使用 setTimeout 作为快速修复,在它们获得 "reset" 后将它们重新设置(这里没有骰子)
- 当我怀疑部分的 js 出于某种奇怪的原因(不是这种情况)覆盖了 .chosen 和 .datepicker 时删除了部分
这是一些代码,我觉得这是我所缺少的愚蠢和简单的东西。
//= require rails-ujs
//= require turbolinks
//= require jquery.min
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
//= require chosen.jquery.min
//= require bootstrap-datepicker
$(document).ready(function(){
$('.chosen').chosen(
{
allow_single_deselect: true,
no_results_text: 'No results matched',
width: '200px'
}
);
$('.datepicker').datepicker();
});
和application.css
/*
*= require_tree .
*= require_self
*= require chosen.min
*= require datepicker
*/
冒犯_form.html.erb
<div class="field">
<%= form.label :customer_id %>
<%# form.text_field :customer_id, id: :order_customer_id %>
<%= collection_select( :order, :customer_id, @customers, :id, :name,{selected: order.customer_id, prompt: false}, { class: 'chosen' }) %>
</div>
<div class="field">
<%= form.label :date %>
<%# form.date_select :date, id: :order_date, class: 'datepicker' %>
<%= form.text_field :date, default: 'Pick a date', class: 'datepicker' %>
</div>
我认为 turbolinks 可以。您可以通过删除 application.js
文件中的 //= require turbolinks
行并重新启动您的应用程序来确认这一点。
如果您的应用程序中确实需要 turbolinks,请查看下面的内容 link 以解决此问题。
Rails 4: how to use $(document).ready() with turbo-links
希望对您有所帮助。