新手问题 Rails 4 Turbolinks 导致 js 工作不正常

williamherry · 2013年08月05日 · 最后由 williamherry 回复于 2013年11月17日 · 7643 次阅读

Rails 3 上跑的很欢的代码放到 Rails 4 上工作异常,初步推测是 Turbolinks 导致

是一个用 ajax 发评论的功能

view 代码

.new-comment                                                                                                                                         
  - if current_user
    = render "editor_toolbar"
    = form_for(Comment.new, :remote => true, :url => mission_comments_path(@mission)) do |f|
      = f.text_area :content, :class => "span10",
        :rows => "4", :tabindex => "1"
      #preview.hidden
        = "Loading..."
      = f.submit t("missions.submit_comment"),
        "data-disable-with" => t("missions.submitting"),
        :class => "btn btn-primary", :tabindex => "2"
  - else
    = render "need_login_to_comment"

controller 代码

def create
  @mission = Mission.find(params[:mission_id])
  @comment = @mission.comments.build(comment_params)
  @comment.user = current_user

  @comment.save
end

js 代码

<% if @comment.errors.any? %>                                                                                                                        
  $(".new-comment textarea").focus();
<% else %>
  $(".comments").append("<%= j (render @comment, :index => @mission.comments.count-1) %>");
  $(".new-comment #preview").addClass("hidden").html('');
  $(".new-comment textarea").css("display", "block").val('');
  $(".editor-toolbar .preview").removeClass("active");
  $(".editor-toolbar .edit").addClass("active");
<% end %>

有两个问题,第一个是如果 controller 那样写什么效果也没有,最后面加上render layout: false就可以了

第二个问题,直接打开这个页面发评论没有问题,但如果从其它页面通过 link 转过来点一次发布会同步发多次

我猜是 turbolinks 的问题,但没办法解决掉,不知道有没人遇到过,还是我代码里有低级错误?望大神帮忙

我想了下,我这个问题实现是 form 被提交了多次,这个 form 里有 remote: true,

问题解决了,把= javascript_include_tag "application", "data-turbolinks-track" => true从 body 移到 head 就好了

#5 楼 @williamherry 放在 body 为什么不行呢

@xxw 可能和加载顺序有关吧

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