【问题标题】:How can I render a partial from .js.erb file in rails 4?如何在 rails 4 中渲染 .js.erb 文件的部分内容?
【发布时间】:2014-08-19 11:42:47
【问题描述】:

在我的 rails 应用程序中,我在 /assets/javascript 文件夹中有 dragdrop.js.erb。在其中我有一个 ajax 块,它应该通过点击操作在 div 中呈现部分内容。我尝试了很多东西,但我无法让它工作。任何帮助将不胜感激。

代码如下:

 $.ajax({  
   type: "GET",    
   url: "<%=  Rails.application.routes.url_helpers.cookbooks_path %>",
   success: function(resp){
  $("#property").load("<%= escape_javascript (render :partial => 'recipes/package_form') %>") 
   }

【问题讨论】:

  • 贴出您尝试过的相关代码,以便我们为您提供帮助
  • 我已经更新了代码
  • 什么错误/异常?无论如何,将.js.erb 保留为assets/javascript 而不是app/views 的任何特殊原因?
  • undefined method render' for #<:application:0x00000002d73f50>(在 /home/cookmaster/workspace/test/app/assets/javascripts/dragdrop.js.erb 中)`

标签: ruby-on-rails ruby


【解决方案1】:

您的问题是您尝试在assets 中使用render,但是,render is not available in assets

您应该将.js.erb 文件移动到app/views 下的适当目录


这里有一些其他类似的问题:

  1. Rendering A Partial In Assets
  2. Rails JS ERB File Cannot Find Method Render
  3. When rendering a partial from tasks.js.coffee.erb - undefined, render

【讨论】:

    【解决方案2】:

    资产管道

    首先,您需要确保不要在您的 javascript 中直接使用任何 Rails 动态路径助手。

    问题在于,如果您预编译资产管道,您通常会发现这些动态路径助手无法正常工作。尽管这并没有什么“错误”——我倾向于将 Rails 后端代码与前端完全分开,以确保应用程序的多功能性:

    #app/assets/javascripts/application.js
    $(document).on("click", ".element", function(){
       $.ajax({  
         type: "GET",    
         url: "/cookbooks"
      });
    });
    

    这将向您的控制器后端发送一个“裸”Ajax 请求(无参数/正文):

    #app/controllers/cookbooks_controller.rb
    Class CookbooksController < ApplicationController
       def index
          @cookbooks = Cookbook.all
          respond_to do |format|
            format.html
            format.js #-> loads /views/cookbooks/index.js.erb
          end
       end
    end
    

    这里的诀窍是您现在可以使用渲染部分所需的参数填充您的 index.js.erb 文件:

    #app/views/cookbooks/index.js.erb
    $("#property").html("<%=j render :partial => 'recipes/package_form' %>") 
    

    --

    这应该适合你

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2017-01-31
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多