0

我需要使用嵌套表单和 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 调用?

提前致谢 ;)

4

4 回答 4

1

如果它有效,那么剩下要做的就是通过将 JavaScript 调用移动到一个单独的whatever.js.erb 文件来让它看起来更漂亮:

不管.js.erb:

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

(注意将 ruby​​ 代码插入到 erb 标签的字符串中的变化)

现在你应该能够做到:

“随便” }, :remote => true %>

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

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

在这里发布它是否有效,如果没有,我们会弄清楚。现在晚安;]

于 2010-06-19T02:02:26.157 回答
1

您可能想看看我的项目https://github.com/adamaig/complex-form-examples,它源自其他人的工作。同样的方法适用于 rails 3(我只是在本地升级了项目以进行测试)。最大的问题是深度嵌套的元素,但这个项目应该演示一种使用 jquery 和 rails 生成的模板的 ujs 方式。

于 2010-12-19T21:08:47.323 回答
0

好的,抱歉,但我没有注意到您不想要 ajax 调用。我不太确定调用页面对象是否无论如何都不会进行调用。我认为要完全不使用 ajax 调用它,您必须在客户端以某种方式缓存该字段。您完全确定您的示例在没有 ajax 调用的情况下可以工作吗?

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

干杯:)

于 2010-06-19T09:39:49.557 回答
0

这确实超出了我在嵌套表单和 UJS 方面的经验,但这是另一个想法,尝试不将 FormBuilder 实例传递给部分。也许它会起作用。我见过奇怪的事情起作用。这可能是正确的,因为您将它呈现在该表单内,因此实例可能无需直接传递即可访问。如果这不起作用,那么需要比我更聪明的人来回答你的问题:)

于 2010-06-19T21:27:48.190 回答