我正在尝试在Ruby on Rails应用程序中使用JavaScript实现进度条,但是我无法将值从控制器传递到JS以更新进度条。
最初,我尝试使用简单的全局变量($count),但一旦加载,变量始终相同。它在JS方面没有更新。
编辑:
现在我正在使用gon宝石来传递值。但是我只得到第一个值(当控制器启动时设置的值)。当我调用由按钮点击触发的方法时,该值会更新,但gon变量始终相同。也许是Rails/Controller中的错误?
我看到了一个公开变量给gon的方法的示例,但它不起作用。
注意:如果在搜索之前删除初始化,则当单击搜索时,JS侧显示“gon变量未定义”
示例代码: application_controller.rb
def application
@count =0 #gon assumes only this value
exposeUnProcessedJobToJavascript
if params[:search]
while(@count < 10)
exposeUnProcessedJobToJavascript
sleep 3
@count +=1
end
end
def exposeUnProcessedJobToJavascript
gon.watch.job = @count
end
end
application.js.erb
function addJobWatchers() {
if (gon.job != undefined) {
gon.watch('job', {
interval: 1000
}, updateProcessingJob);
}
}
function updateProcessingJob(job) {
if (job) {
console.log("JOB: " + job);
}
}
$(document).on('page:change', function() {
$("#search_button").click(function() {
console.log("click search");
if (typeof gon !== 'undefined') {
addJobWatchers();
}
});});