Turbolinks 3 和渲染部分视图

6
我很兴奋关于turbolinks3(它允许你仅渲染部分内容而不重新加载整个页面)。你可以在这里阅读更多相关信息:https://github.com/rails/turbolinks/blob/master/CHANGELOG.md。虽然这很棒,但我有一个问题:在不支持pushState的浏览器(例如ie8/9)中,我不知道如何管理其行为。在IE8上它给我这个错误:
Could not set the innerHTML property. Invalid target element for this operation.

我的控制器代码如下:

  def create
    @post = Post.find(params[:post_id])

    if @post.comments.create(comment_params)
      render '_comment', change: [:comments, :super_test], layout: false, :locals => { comment: @post.comments.last }
    else
      render json:'error'
    end
  end

一个“解决方案”可能是我这样做:
redirect_to @post, change: [:comments, :super_test]

但问题在于它会回复我很多不需要的数据!(响应时间也更长)。所以我真的想找到另一种解决方案。
如何解决这个问题?我考虑了两种解决方案:
1)使用history.js / modernizr在旧浏览器上填充pushState 但我试过了,总是得到相同的错误(就像没有modernizr一样)
网页错误详细信息 用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0) 时间戳:Sat, 25 Apr 2015 17:28:52 UTC 消息:无法设置innerHTML属性。对于此操作而言,目标元素无效。 行:26 字符:30464 代码:0 URI:https://stark-forest-5974.herokuapp.com/assets/application-83a3aa4fd4a1ee124da87760bfdca86febd4fc1cb8a13167c892a15ce3caa53d.js 2) 找到一种方法来检查请求是由turbolinks / pjax完成的还是不完整的...并使用有条件的渲染或redirect_to
但我不知道如何做到这一点,因为turbolinks不像jquery-pjax那样发送特定的标头。
有什么建议吗?非常感谢!
PS:请不要向我推荐backbone / angular / ember / react,我已经了解了它们(backbone),但我想尝试turbolinks。
1个回答

0

你的第一直觉是正确的,使用IE8时需要modernizr。问题不在于你的代码或turbolinks,而是IE8本身。

附注:Turbolinks实际上并不替换JS框架,如果你想要,你完全可以与其中一个框架一起使用它。我曾经将其与React和Angular一起使用过。Turbolinks只是避免了多次重新加载相同的内容(这已经感觉像魔法了)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接