1

我有一个 link_to_remote 来呈现对象的编辑操作。但它所做的只是用这个响应更新 Dom 元素

try { } catch (e) { alert('RJS error:\n\n' + e.toString()); alert(''); throw e }

我的链接如下所示:

= link_to_remote t("txt.edit"), :update => dom_id(comment), :url => edit_comment_path(comment.id)

我在评论控制器中的编辑操作:

  # GET /comments/1/edit
  def edit
    @comment = Comment.find(params[:id])
    respond_to do |format|
      format.html
      format.js { render :action => "edit" }
    end
  end

根据日志,请求似乎没问题:

Processing CommentsController#edit (for 127.0.0.1 at 2009-04-08 18:55:36) [GET]
  Session ID: 1d4b9b3d3319d5cd556d00d2e053b651
  Parameters: {"authenticity_token"=>"5d70f9e5beded361ee7e87ee591512411e8f3eec", "id"=>"18"}
  User Columns (2.0ms)   SHOW FIELDS FROM `users`
  User Load (0.5ms)   SELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
  Account Columns (1.6ms)   SHOW FIELDS FROM `accounts`
  Account Load (0.2ms)   SELECT * FROM `accounts` WHERE (`accounts`.`subdomain` = 'xxx') LIMIT 1
  Comment Columns (1.7ms)   SHOW FIELDS FROM `comments`
  Comment Load (0.6ms)   SELECT * FROM `comments` WHERE (`comments`.`id` = 18) 
Rendering comments/edit
Completed in 30818ms (View: 2, DB: 7) | 200 OK [http://xx.xxx.rails/comments/18/edit?authenticity_token=5d70f9e5beded361ee7e87ee591512411e8f3eec]

我究竟做错了什么?谢谢您的帮助!

更新:顺便说一句,它与 RJS 模板一起工作——这就是我现在解决它的方法。但我仍然更喜欢呈现视图的解决方案。否则我必须为此目的创建一个部分(我无法使用 rjs 页面更新呈现视图 - 至少我不知道如何)。

4

6 回答 6

1

或者根本不要抓住“respond_to”,因为在这两种情况下你都在做同样的事情!只需注释掉:

respond_to do |format|
  format.html
  format.js { render :action => "edit" }
end
于 2009-04-09T08:00:17.797 回答
1
:script => true

将此添加到link_to_remote调用中,它应该使 rails 评估返回的任何脚本,而不是以纯文本形式输出它们。

于 2009-06-26T11:45:19.990 回答
0

从您的 RJS 标记中删除 :update 选项。我在那里有一个,当我尝试 insert_html 时,它显示的是从该方法返回的 JS,而不是在 DOM 上执行它。所以它正在显示 => 尝试 {...}

在我的视图中,我从我的 link_to_remote 语句中取出了 :update 属性,使用了一个 render: update do |page| page.insert_html(...) end块,它执行了返回的 JS 而不是显示它。

希望有帮助。

于 2010-08-01T23:08:18.603 回答
0

您忽略提及的一件事是模板是什么......我猜这就是问题所在。如果是 ERB,请尝试以下操作:

format.js { 渲染 :action => "edit.html.erb" }

于 2009-04-08T22:17:46.217 回答
0

看起来您可能忘记在视图中包含对 Javascript 库的引用,并且视图正在呈现文字 JavaScript 而不是解释它。

<%= javascript_include_tag :defaults %>
于 2009-04-09T02:10:19.137 回答
0

当您响应 js 请求时,render :action => "edit"将尝试渲染 edit.rjs,一个 rjs '模板',而不是 edit.haml,一个 html 模板。

于 2009-11-18T15:47:50.130 回答