繁体   English   中英

使用ujs渲染部分,并且在rails 3上没有AJAX调用

[英]render partial using ujs and without AJAX call on rails 3

我需要使用嵌套表单和jQuery进行多个文件上传。 所以我写了一个使用link_to_function方法的助手:

  def add_document_link(title, form)
    link_to_function title do |page|
      form.fields_for :documents, Document.new, :child_index => Time.now.to_i do |f|
        page << "$('#documents').append('#{escape_javascript(render('/realties/document', :f => f))}');"
      end
    end
  end

此代码仅创建一个链接,如果按下该链接,将呈现新文件上传嵌套表格。 即使我正在使用rails3 beta4,它也出乎意料地起作用(而且我知道不赞成使用“ link_to_function”)

有没有没有使用link_to_function或一些AJAX调用的更好的方法吗?

提前致谢 ;)

如果它能正常工作,那么剩下的唯一要做的就是将JavaScript调用移到一个单独的what.js.erb文件中,使其看起来更漂亮:

whatever.js.erb:

“” $('#documents')。append('<%= escape_javascript(render('/ realties / document',:f => f))%>);“

(请注意将红宝石代码插入到erb标签的字符串中的更改)

现在您应该可以执行以下操作:

“无论”},:remote => true%>

代码将更加简洁,输出的html看起来会更好,因为现在那里没有任何javascript。 只需确保您的文档为html5并包含JS库(由于代码有效,您就可以这样做了:)。

我本人正在使用Prototype,但在JQuery中应该没有什么不同。 我现在能想到的唯一弱点是将表单块传递给了partial,但是它应该可以工作,想不上太迟了:)

在这里发布是否有效,如果没有成功,我们会解决。 晚安吧;]

您可能想看看我的项目https://github.com/adamaig/complex-form-examples ,它是从其他人的作品中衍生而来的。 相同的方法适用于Rails 3(我刚刚在本地升级了该项目以进行测试)。 最大的问题是深度嵌套的元素,但是该项目应演示使用jquery和rails生成的模板的ujs方法。

好的,很抱歉,但是我没有注意到您不希望ajax调用。 我不确定如果调用页面对象仍然不会进行该调用。 我认为要完全不使用ajax来调用它,就必须在客户端以某种方式缓存该字段。 您完全确定您的示例无需ajax调用即可工作吗?

如果能做到,那么让我想起来“不那么麻烦”的唯一方法就是将javascript提取到application.js文件中,该文件用于存储您自己的javascript,然后从视图内部调用该函数。 那就是如果您包含该文件(application.js)。 这将只是将javascript从视图中移开,而根本不改变代码的工作方式。

干杯:)

这确实超出了我使用嵌套表单和UJS的经验,但是这是另一个想法,请不要将FormBuilder实例传递到局部中。 也许会起作用。 我看过陌生的东西起作用。 这可能是正确的,因为您将其渲染到该表单内部,因此无需直接传递实例就可以访问该实例。 如果这不起作用,那么将需要比我更聪明的人来回答您的问题:)

参见RailsCasts第196和197集

我为仅链接的答案表示歉意,但没有人比Ryan更好:

196.嵌套模型表格第1部分

197.嵌套模型表格第2部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM