Rails 基于 AJAX 的按钮实现。

zzjkevin · 2014年03月19日 · 最后由 Justin 回复于 2014年03月27日 · 3025 次阅读

有两个表单: <%= form_for(@web ,remote: true) do |f| %> <%= f.submit "Follow", class: "btn btn-large btn-primary" %> <% end %>

<%= form_for(@web, html: { method: :delete },remote: true) do |f| %> <%= f.submit "Unfollow", class: "btn btn-large btn-primary" %> <% end %>

我是用 ajax 的方式,想实现,例如原来是 follow 的,点击完之后变成 unfollow,原来是 unfollow,点击完之后是 follow。

我的控制器里面是: respond_to do |format| format.html { redirect_to home_path } format.js end

还需要 JS 的代码怎么写?或者是我这里有没有什么不当的地方?

这种方式添加一个 .js.erb 文件 在里面写 js 操作 可以把两个 form 放到 partial, follow 成功在 js 里面替换那个 form

#1 楼 @rociiu ,我尝试了,写了两个局部视图文件,一个是_follow.html.erb,另一个是_unfollow.html.erb,然后我的控制器,一个方法是 create,一个是 destroy。我创建了一个 create.js.erb 的文件,里面是:$("#follow").html("<%= escape_javascript(render('naspolindex/unfollow')) %>")

其中,naspolindex 是一个控制器,里面的 show,就是放表单的。

看看 create 和 destroy 是如何增删元素的 Rails 的 CRUD 在一个页面内实现,供参考

#2 楼 @zzjkevin 这样应该没有问题的 你检查一下 jquery 选择器和 render 文件目录对不对

Ruby China 就有这样的功能,源代码也有,你不看看?!

#4 楼 @karmue render 文件目录是对的,jquery 也没错啊

如果是我的话,我会为这个 follow 按钮绑定一个提交事件,用 jQuery 的 ajax 去请求控制器,在 success 回调中替换这段 html 代码,然后为这个元素 unfollow 绑定另一个提交事件。

用 Ember.js 或 Angular.js 这些问题轻松解决

用惯了 slim 再来看 erb,感脚凌乱。。。

#5 楼 @huacnlee 看下 ruby-china 的实现,应该不错。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号