我的javascript在redirect_to之后没有被调用。这是预期的吗?有没有办法让它被调用?
# file: app/controllers/widgets_controller.rb
class WidgetsController < ApplicationController
# GET /widgets
def index
@widgets = Widget.order(:id)
end
# GET /widgets/refresh_all
def refresh_all
@widgets = Widget.order(:id)
@widgets.refresh_all
redirect_to :widgets
end
end
在/app/views/widgets/index.html.erb
:
<p>Widgets are <%= @widgets.any_refreshing? ? "" : "not" %> being refreshed.</p>
<script type="text/JavaScript">
$( window ).load(function() {
console.log( "...C" );
});
$( document ).ready(function() {
console.log( "...B" );
});
console.log("...A" );
</script>
当我通过GET /小部件访问页面时,javascript被触发,我看到&#34; ... A \ n ... B \ n ... C \ n&#34;在控制台上。当我通过GET / widgets / refresh_all访问页面时,页面被正确呈现(&#34;小部件正在刷新&#34;),但javascript中没有任何内容被调用。
这可能是因为我在我的控制器中做了redirect_to :widgets
吗?
我错过了什么?
答案 0 :(得分:1)
不完全确定发生了什么,但有类似的东西。
你的js在dom完成加载之前正在加载并运行。一旦dom加载,请尝试调用js。尝试
jquery或类似的$(document).ready
。
刷新时,dom和资产会被缓存,因此js会在正确的时间运行。
答案 1 :(得分:0)
事实证明,Turbolinks因为我不完全理解的原因而在重定向后禁止调用javascript。 FWIW,它也抑制了元刷新。 (也许专家可能会为什么...... ...)
无论如何,修复是添加
<body data-no-turbolink="true">
...
</body>
要禁用Turbolinks的页面。有关详细信息,请参阅https://stackoverflow.com/a/22327275/558639。