我想在Rails中创建一个自定义动作,它将更新视图并在div上打印一些信息。Rails 3 - 自定义ajax动作不起作用
我使用宝石进行文件上传: https://github.com/valums/file-uploader/blob/master/client/fileuploader.js
后上传成功我想和AJAX页面有多少毫秒需要更新。
在旧的Rails我会写有:
def set_tab
@diff = count_miliseconds_method
render :update do |page|
page.replace_html "place_menu", render(:partial => 'place_menu')
end
end
但我无法弄清楚如何做到这一点的Rails的3.1。
我的自定义操作的控制器代码:
def custom
[...] # Here everything works OK
start_time = Time.now
Some_method
end_time = Time.now
@diff = ((end_time - start_time)*100).to_i # counted miliseconds
respond_to do |format|
format.json {render :json => {:success => true, :time => @diff}, :status => :created, :location => custom_words_path}
end
end
我custom.js.erb代码
var el = $('#upload-log');
el.append("#{@diff} ms");
不幸的是,这并不工作。我得到回应,例如 {"success":true, "time":324}
但js.erb文件没有得到执行,页面没有包含有关毫秒的信息。
任何想法如何解决这个问题?
更新
Github上回购: https://github.com/there-is-no-spoon/Anagram
窗口。所以这是个更大的问题,因为我通过JS插件调用了这个动作。下面是代码:https://github.com/there-is-no-spoon/Anagram/blob/master/app/views/words/index .html.erb –
阅读js手册。你需要为文件上传器实现onComplete事件处理程序。 –
我认为这足以将操作更改为/words/uploader.js。但@AdityaSanghi建议也可以 - 你可以用onComplete处理程序来实现你想要的。 –