【问题标题】:load partial with jquery and rails用 jquery 和 rails 加载部分
【发布时间】:2010-02-09 14:36:29
【问题描述】:

我很好奇用 jquery 加载 rails 部分的最佳方法是什么。到目前为止,我尝试了一个不起作用的解决方案:

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});

为此构建单独的操作和/或控制器并设置路线的最佳解决方案是什么?我问是因为使第一个解决方案工作似乎更容易,也许不是那么平静。

谢谢。

【问题讨论】:

  • 就像一个注释,你也不能使用 .html() 来加载你的部分。即使您使用 ruby​​ 代码调用它。这是因为它将整个表单呈现在引号之间并将所有内容都弄乱了。如果我知道的话,我会建议另一种方式,尽管这就是我正在寻找自己的 atm 的方式。

标签: jquery ruby-on-rails load partial


【解决方案1】:

您应该无法从 HTTP 请求访问模板文件 (.erb),这是非常糟糕的做法。我建议您将它们放在您的网络服务器路径之外,并且只能通过您的应用程序访问它们。

我不确定 Rails,但我想您需要创建一个单独的控制器(或其他)来执行此操作。

编辑这是因为 .erb 文件是嵌入式 Ruby 文件,如果您尝试请求它们,您将获得所有不需要的数据,例如 <%= page_title %>,您不想显示用户。因此,您需要通过 Rails 应用程序传递这些 .erb 文件,以便将它们正确解释为 HTML。

【讨论】:

  • 好的 - 感谢您的洞察力。我会相应地组织它。
【解决方案2】:

代码不起作用的原因是 rails 不会将视图文件暴露在外部。为了实现你想要的东西,你需要一个动作来呈现这个部分:

def image_gallery
  render :partial => "image_gallery"
end

还有一个名为 jRails 的插件,它将标准的 ajax 助手(使用原型)替换为等效的面向 jquery 的助手。在你的情况下,你会使用类似的东西

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>

更重要的是,在 Rails 3 中您将不再需要它。见this link

【讨论】:

    【解决方案3】:
    【解决方案4】:

    另一种选择:

    $('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
    

    【讨论】:

      【解决方案5】:

      使用 rails 3 你可以做到...

      控制器

      @content = '/some/partial'
      

      查看 - haml.erb(html.erb) 或 js.erb

      $('#myDiv').html("<%= escape_javascript render @content %>");
      

      如果 rails 2 你可以试试这个(只有原型可用,除非没有添加冲突)...

      在控制器中

      @content = render :partial=>"/users/cool_partial"
      

      调用你的js

      myFunction(#{@content.to_json})
      

      你的功能...

      myFunction = function(content){
      
          $("myDiv").html(content);
      
      }
      

      我同意 neutrino 的观点,即这可以通过一个动作来更好地处理。

      def get_partial
        render 'some/partial'
      end
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        相关资源
        最近更新 更多