0

我正在关注从 Apress 2010 开始的 Rails 3 更新书。我遇到的问题是使用 jQuery 适配器使用 Ajax 动态加载模板。一切正常,但它似乎在页面上呈现了三遍。

这是当用户单击“新评论”链接时我如何动态加载它的。

意见/文章/show.html.erb

<%= link_to "new comment",
            new_article_comment_path(@article, :format => :js),
            :remote => true,
            :id => 'new_comment_link' %>

然后我把它渲染成这样。

意见/评论/new.js.erb

$("<%= escape_javascript render :file => 'comments/new'," +
  " :formats => [:html], :handlers => [:erb] %>")
  .insertAfter('#comments');

然后我在日志中看到了这一点。

Started GET "/articles/1/comments/new.js" for 127.0.0.1 at 2013-01-18 14:51:05 -0600
Processing by CommentsController#new as JS
  Parameters: {"article_id"=>"1"}
  Article Load (0.2ms)  SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? LIMIT 1  [["id", "1"]]
  Rendered comments/new.html.erb (53.8ms)
  Rendered comments/new.js.erb (54.6ms)
Completed 200 OK in 57ms (Views: 55.9ms | ActiveRecord: 0.2ms)

注意到它呈现了我的 erb 和 js 文件吗?不知何故,最终在我的页面上出现了 3 次。

关于如何解决这个问题的任何线索?我正在使用 Rails 3.2.9、rails.js(最新)和 jquery-1.9.0。

谢谢!

4

1 回答 1

0

解决了!

原来我添加了 rails.js 和 jquery.js TWICE!

简而言之:assets/javascripts/application.js 对于将 javascript 文件包含到您的应用程序中至关重要。基本上在那里定义的任何东西都会被推送到页面上。您只需要确保它在应用程序中至少被定义一次。

视图/布局/application.html.erb

<%= javascript_include_tag "application" %>

就是这样!Ajax jQuery 适配器应该可以正常工作。注意不要将任何其他文件添加到 javascript 文件夹中,因为这些文件也会被推出,而这正是您不想要的。基本上,我通过 application.html.erb 和手动下载这两个文件来定义适配器。希望这会帮助一个迷失的可怜的灵魂。

快乐黑客。

于 2013-01-19T14:43:27.920 回答