我是一个经验丰富的JAVA和C++开发人员,我试图理解rails是如何工作的。
我在下面得到了这个代码:
respond_to do |format|
if @line_item.save
format.html { redirect_to store_url }
format.js { render :json => @line_item, :mime_type => Mime::Type.lookup('application/json'),
:callback => 'javascriptFunction' }
我一直在搜索定义我可以在format.js {}
内传递的内容的 api,但我找不到。.
首先:format.js
什么样的语句,这是一个变量吗?
最重要的是:我可以将哪些属性传递到格式中.js {} ? 你能传递直接链接吗?我已经搜索了 http://api.rubyonrails.org/
respond_to do |format|
format.js # actually means: if the client ask for js -> return file.js
end
js
此处指定控制器方法将作为响应发回的 MIME 类型;
默认 Rails mime-types.
如果您也尝试使用format.yaml
:
respond_to do |format|
format.js
format.yaml
end
这意味着您的控制器将根据客户端的要求返回yml
或js
;
就红宝石而言,{}
是一个块;如果未指定任何 rails 将尝试从 app/views/[contorer name]/[controller 方法名称] 呈现默认文件。[html/js/...]
# app/controllers/some_controller.rb
def hello
respond_to do |format|
format.js
end
end
将寻找/app/views/some/hello.js.erb
;//至少在 Rails v. 2.3 中。
如果指定了块:
respond_to do |format|
# that will mean to send a javascript code to client-side;
format.js { render
# raw javascript to be executed on client-side
"alert('Hello Rails');",
# send HTTP response code on header
:status => 404, # page not found
# load /app/views/your-controller/different_action.js.erb
:action => "different_action",
# send json file with @line_item variable as json
:json => @line_item,
:file => filename,
:text => "OK",
# the :location option to set the HTTP Location header
:location => path_to_controller_method_url(argument)
}
end
我相信这是您要查找的网址:
https://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to
这可能对某些人也有帮助,可以看到您实际上可以直接在 format.js 方法中渲染 js,例如,如果您只想返回一个小的一行 js 语句,并且您不想像 controller_action_name.js.erb
这样的 RJS 文件:
respond_to do |format|
format.html { redirect_to new_admin_session_path }
format.js { render :js => "window.location='#{ new_admin_session_path }'" }
end