【问题标题】:rails respond_to format.js APIrails respond_to format.js API
【发布时间】:2017-09-12 21:46:58
【问题描述】:

我是一位经验丰富的 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是一个什么样的语句,它是一个变量吗?

最重要的是:我可以将哪些属性传递给 format.js {} ?你能通过直接链接吗?我搜索了http://api.rubyonrails.org/

【问题讨论】:

    标签: ruby-on-rails ruby syntax


    【解决方案1】:
    respond_to do |format|
      format.js # actually means: if the client ask for js -> return file.js
    end
    

    js 此处指定控制器方法将作为响应发回的 MIME 类型;
    Default Rails mime-types.
    如果您也尝试使用format.yaml

    respond_to do |format|
      format.js
      format.yaml
    end
    

    这意味着您的控制器将根据客户端的要求返回ymljs

    {} 就红宝石而言是block; 如果您不指定任何 rails 将尝试从 app/views/[contoller name]/[controller method name].[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
    

    【讨论】:

    • 如果要指定调用的js文件,而不是文件名与方法名相同的约定怎么办?我正在尝试为不同的控制器使用相同的 js 文件。
    • format.js { :render ... 应该是 format.js { render ...。我会编辑它,但我必须更改超过 6 个字符才能保存更改。
    • 仍然,问题仍然存在:what kind of statement is format.js, is that a variable?
    • @Ferenjito, format 是来自块 respond_to do |format| 的变量,其中包含一个对象。在该对象上调用 .js 定义了 javascript mimetype 响应的行为。 DSL的排序
    • 单独format.js 抛出错误> 未知格式。但是当我输入format.html 时,它允许我在不输入 js.erb 文件的情况下进行操作。为什么
    【解决方案2】:

    我相信这是您要查找的网址:

    https://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

    这也可能对某些人有所帮助,看看您实际上可以在 format.js 方法中直接渲染 js,例如,如果您只想返回一个小的一行 js 语句,并且您 不要't 想要推迟到像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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多