【问题标题】:How to say this Ajax call in Rails3?如何在 Rails3 中说这个 Ajax 调用?
【发布时间】:2011-10-25 15:34:28
【问题描述】:

我正在为来自 Rails 2 的 Ajax 调用而苦苦挣扎:

def add_task_link(名称) link_to_function name do |page| page.insert_html :bottom, :tasks, :partial => 'task', :object => Task.new 结尾 结尾

如何使用 Rails 3 表达这一点?

谢谢,

【问题讨论】:

  • 我试过这个:link_to_function name, "task" do |page|但这在“onclick”属性中提供了一些 JS 代码,我不明白如何处理

标签: ruby-on-rails ajax ruby-on-rails-3


【解决方案1】:

我想你可能想要 link_to :remote => true 代替。 link_to_function 旨在接受它放在 onclick 属性中的 JavaScript 代码字符串。因此,不要使用您的辅助方法,而是使用类似

<%= link_to 'My Link', new_task_path, :remote => true %>

然后在你的新动作中,你需要添加一个 .js 响应块。

def new
  @task = Task.new
  respond_to do |format|
    format.html
    format.js { render :layout => false } # add this line
  end
end

然后在app/views/tasks下创建一个名为new.js.erb的文件,并添加:

$('body').append('<%= escape_javascript(render :partial => "form", :locals => { :task => @task }) %>');

如果设置了部分表单(您可以将其用于 new.html.erb 和 edit.html.erb 文件),应该可以正常工作。从这个示例存储库中获取了一些示例:https://github.com/nu7hatch/rails3-ujs-example/blob/master/ 我必须承认,我在 Rails 中没有做很多 link_to 远程编码示例。我所做的大多数 ajax 调用都使用 JSON 响应。于是我在asset pipeline下写了js代码。

【讨论】:

  • 这是加载 HTML 的正常 sn-p 的一个很好的总结。我所处的情况使用必须与表单的其余部分“同步”的输入字段。我仍然需要更多地了解 Ajax 才能完全理解下面的解决方案。感谢您的反馈。
  • 如果我没看错,您希望在表单中即时添加其他字段吗?然后你仍然可以使用上面的代码,只是调整它。而不是附加到正文,附加到您的表单标签。创建另一个包含您需要的字段的部分。然后只需在 new.js.erb 文件中引用该部分名称。
【解决方案2】:

这个项目在 Github 上有一些提示:https://github.com/ryanb/complex-form-examples

def link_to_add_fields(名称,f,关联) new_object = f.object.class.reflect_on_association(association).klass.new fields = f.fields_for(association, new_object, :child_index => "new_#{association}") 做 |builder| 渲染(association.to_s.singularize + “_fields”,:f => builder) 结尾 link_to_function(名称,“add_fields(这个,\“#{association}\”,\“#{escape_javascript(字段)}\”)“) 结尾

此外,使用accepts_nested_attributes_for 也很重要,如

https://github.com/ryanb/complex-form-examples/blob/master/app/models/survey.rb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多