在Rails应用程序中单击链接后显示消息,即使该方法的执行尚未完成
Display message after clicking a link in Rails application even if the execution of the method is not finished
很抱歉问题的提法,我真的不知道如何简单地解释我的问题。
我为Redmine平台创建了一个插件,用户可以在Redmine的文档选项卡上同步他的Dropbox帐户,一切都很好,但我有一个小问题。
当用户单击synchronise
链接时,我想在我的视图中显示一条小消息,通知他工作已经开始。此外,如果出现一个小的弹出窗口让用户选择他是否真的想进行同步,那就太好了,因为这可能需要一段时间。
我尝试了一些事情:
首先,我这样写我的link_to
:
<%= link_to 'Synchronise', {:controller => "projectusers", :action => "dropbox_sync", :id => p, :project_id => @project.identifier}, :class => "icon icon-reload", :confirm => "Are you sure you want to .. bla bla" %>
这很好,但我不知道如何在用户接受同步后直接在我的视图中显示消息,有办法做到这一点吗?
第二个,我使用了一些Javascript。我在视图的开头写了这样一个小脚本:
<script>
function displayMessage()
{
alert("Sync is about to start blabla);
$('#syncStarted').show();
}
</script>
然后是一个小的隐藏段落:
<p id="syncStarted", style="display:none"><strong><font color="green">Synchronisation has started, please wait...</font></strong></p>
我这样调用我的函数:
<%= link_to 'Synchronise', {:controller => "projectusers", :action => "dropbox_sync", :id => p, :project_id => @project.identifier}, :class => "icon icon-reload", :onclick => "displayMessage()" %>
我知道这不是一个很好的Ruby/Rails实现JS的方式,我的html相当过时(CSS会更好),但它工作得很好。唯一的问题是,用户没有选择,如果他点击链接,同步将开始,即使他关闭弹出窗口点击交叉。
也许你能帮我找到更好的方法来做到这一点,我认为使用:confirm
参数更好,但我找不到如何在用户确认动作后在我的页面上添加一个小通知。
我正在使用Rails v3.2.16.
谢谢
是否在同步后重定向到另一个视图?然后只需使用内置闪光灯。重定向:
redirect_to after_sync_url, notice: "Sync has started."
在视图后的位置像这样:
<% flash.each do |name, msg| -%>
<%= content_tag :div, msg, class: name %>
<% end -%>
如果你想要显示进度条或加载程序,表明同步正在后台运行,你必须像Anton建议的那样做。因为我认为同步需要很多时间,我建议使用加载器并在后台运行同步。
有很多解决方案。试试下一个:
检查你的application.js是否在布局中加载并且包含:
//= require jquery
//= require jquery_ujs
在视图中:
<%= link_to 'Synchronise', {:controller => "projectusers", :action => "dropbox_sync", :id => p, :project_id => @project.identifier}, :class => "icon icon-reload", :remote => true, :confirm => "Are you sure you want to .. bla bla" %>
<p id="syncStarted" style="display:none"><strong><font color="green">Synchronisation has started, please wait...</font></strong></p>
in projectusers controller:
def dropbox_sync
... # action logic
respond_to :js
end
添加一个名为dropbox_sync.js的视图文件。只有字符串的动词:
$('#syncStarted').show();
- 对象不支持属性或方法“自动完成”
- 对象#<XMLHttpRequest>没有方法'完成'
- 如何将一个方法延迟到另一个方法首先完成,javascript
- 为什么谷歌地图API's方法未从RequireJS中正确调用
- jQuery验证器添加方法未定义
- RTCDataChannel发送方法未发送数据
- jQuery方法未按预期工作-toggleClass
- JQuery.ajax() 方法未执行
- 定义的静态方法未定义
- 继续之前需要FineUploader方法uploadStoredFiles完成
- 主干模型方法未递增
- 在jQuery就绪函数上未完成Primefaces布局组件
- 添加innerHTML和自动完成未完成的行
- Grails:AJAX onSuccess方法未触发
- Async.js队列工作程序未完成
- 方法未捕获SecurityError:阻止了具有原点的帧
- HTML方法未使用Document Ready加载值
- 未捕获的类型错误:对象 [对象对象] 没有方法“自动完成”(可能不是冲突问题)
- 在执行下一个方法之前未完成(javascript jquery google maps v3 api)
- 当应用程序停留时告诉用户“正在保存”;(方法.调用正在运行但未完成)