首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按钮不更新Ajax教程3中的§12.2.5

按钮不更新Ajax教程3中的§12.2.5
EN

Stack Overflow用户
提问于 2011-05-27 19:27:04
回答 5查看 2.8K关注 0票数 10

我正在阅读Michael的Rails教程,在第12.2.5节中遇到了一个小问题,我们应该用Ajax创建一个工作按钮。我知道代码是正确的(我最终直接从书中复制它,并再次输入它三次),我是绿色的。但实际上不起作用!

通过本教程的这一部分,我们将更改一个常规的表单提交按钮来使用Ajax,这样整个页面就不会“刷新”(实际上,重定向到同一个页面),而只是按钮和相应的侧栏项更新。问题是按钮不会像我期望的那样在点击时自动重新加载。它确实在页面刷新时重新加载。如果我在浏览器中禁用JS,它会像应该的那样恢复到触发重定向和“刷新”整个页面的HTML版本。如果你想知道,我尝试过刷新页面,我也尝试过Firefox,Safari和Chrome,以及隐身浏览器。我已经关闭并重新启动了rails服务器,spork和autotest。我重写了所有的代码,然后复制了这本书的所有代码。还是很困惑。

因此,即使测试是绿色的,我的工作功能也不完善。也许我遗漏了什么你能帮我找到吗?也许我错过了一个与javascreipt相关的创业板,一个Ajax宝石.

守则的有关部分:

relationships_controller.erb:

代码语言:javascript
复制
class RelationshipsController < ApplicationController
  before_filter :authenticate

  def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end

结束

代码语言:javascript
复制
  def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end
end

_follow.html.erb:

<%= form_for(current_user.relationships. )编译( :followed_id => @user.id),:remote => true) <%= f.submit“跟随”%> <% end %>

_unfollow.html.erb:

代码语言:javascript
复制
<%= form_for(current_user.relationships.find_by_followed_id(@user),
         :html => { :method => :delete },
         :remote => true) do |f| %>

<%结束%>

create.js.erb

代码语言:javascript
复制
$("follow_form").update("<%= escape_javascript(render('users/unfollow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')

destroy.js.erb

代码语言:javascript
复制
$("follow_form").update("<%= escape_javascript(render('users/follow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')

我还确保这一行包含在application.html.erb中。

代码语言:javascript
复制
<%= javascript_include_tag :defaults %>

如果您还有什么需要评估的情况,请询问,我会提供最新的答复。

提亚

EN

回答 5

Stack Overflow用户

发布于 2012-01-23 16:59:25

您使用的是什么版本的rails?如果它的3.1,你必须改变

create.js.erb到:

代码语言:javascript
复制
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')

和destroy.js.erb到:

代码语言:javascript
复制
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')

(请注意额外的#)它在本教程的最后一章,改为rails 3.1的注释

票数 6
EN

Stack Overflow用户

发布于 2011-11-16 14:48:13

<%= javascript_include_tag :defaults %>更改为application.html.erb文件中的<%= javascript_include_tag 'prototype' %>,这为我解决了这个问题。

见链接:

12

票数 3
EN

Stack Overflow用户

发布于 2011-11-25 15:36:54

我使用Rails 3.1.1,在Rails 3.0教程中也有同样的问题。在版本中,更新Rails已经脱离了原型,并开始使用jQuery。要更正javascript的旧版本,我必须更新create/deady.js.erb。

你可以在第13章上读到它。它归结为在标记id前面添加一个"#“,并将".update”调用替换为".html“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6156815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档