0

我需要使用嵌套窗体和jQuery做多个文件上传。所以我写了使用link_to_function方法的帮手:渲染部分使用ujs和没有AJAX调用的轨道上3

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调用?

在此先感谢;)

+0

编辑:根据本: http://github.com/rails/prototype_legacy_helper 似乎link_to_function是早在导轨上。不知道它是暂时的还是永久的:| – 2010-06-19 14:03:40

回答

1

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

+0

伟大的链接!谢谢,我会研究这些代码;-) – 2010-12-20 09:01:22

1

如果成功,则唯一剩下要做的就是让它看起来由JavaScript调用移动到一个单独的文件whatever.js.erb漂亮:

“('/ realties/document', :f => f))%>);”

(注意插Ruby代码转化为该局标签字符串的变化),你应该能够做到

现在:

“无所谓”}:远程=>真%>

该代码将更加简洁,并且成功的html看起来会更好,因为现在没有任何JavaScript。只要确保你的文档是html5,并且你包含了JS库(你可能会在你的代码工作之后做的)。

我自己正在使用Prototype,但它不应该在JQuery中有所不同。 现在我能想到的唯一弱点是将表格块传递给部分,但它应该工作,现在想想太迟了:)

在这里发帖是否有效,如果不是,我们将图出来。现在晚安;]

+0

感谢您的回复。我的问题是我不会使用远程操作。我粘贴的代码在客户端上工作,而无需创建远程操作。 我想用一些不太显眼的东西做同样的事情:P btw我会尝试一些不同的东西,以防我粘贴在这里;) – 2010-06-19 08:57:43

0

好的抱歉,但我没有注意到你不想要ajax电话。但我不太确定是否调用页面对象并不会调用这个调用。我认为,完全不使用ajax,你必须在客户端以某种方式缓存字段。你完全确定你的例子没有ajax调用吗?

如果我能想到的唯一让它“不那么突兀”的方法是将javascript提取到application.js文件中,该文件用于存储自己的javascript,并从该视图中调用该函数。那就是如果你包含那个文件(application.js)。这将简单地将javascript从视图中移开,而不会改变代码的工作方式。

干杯:)

+0

谢谢你的回复。我认为缓存这种形式并不容易,否则我可以用jquery生成html。 我也尝试使用一些JavaScript外部标签,但它不起作用。但它不能与Ajax调用too.that这是因为它需要FormBuilder实例... 与轨道<3,使用强大的JS,这从来没有是一个问题。我一直使用我的助手(如发布的)来呈现嵌套表单,而不需要任何Ajax调用。 现在,与rails3,link_to_function已弃用,好的。但我真的很想知道是否有另一种方法来完成相同的任务。 – 2010-06-19 13:38:46

0

这确实exceedes我的嵌套形式和UJS经验,但这里的另一个想法尽量不经过FormBuilder到例如分。也许它会工作。我看到陌生人的事情工作。这可能是正确的,因为您将它呈现在INSIDE内部,因此实例可能无需直接传递即可访问。如果不工作,那么它会采取聪明的人比我来回答你的问题:)

+0

通过不传递一个FormBuilder实例来获得这个工作,我应该创建一个* ad hoc * html表单,使用正确的标签属性。它肯定会工作,但它不干净:/ 感谢您的回复;) – 2010-06-21 07:52:43

0

见RailsCasts情节196和197

我道歉的唯一纽带,答案,但没有人说,这不是更好瑞恩:

196. Nested Model Form Part 1

197. Nested Model Form Part 2

+0

感谢您的回复,这是我在几个项目中使用的方法(使用jQuery而不是原型)。顺便说一句,这不是一个不显眼的解决方案。我一直在寻找的东西是不显眼的,有相同的结果。 – 2010-09-16 11:54:30