【问题标题】:Turbolinks 3 and render a partialTurbolinks 3 并渲染部分
【发布时间】:2015-07-04 07:11:05
【问题描述】:

我对 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]

但问题是它回复了很多我不需要的数据!(而且响应时间更长)所以我真的想找到另一个解决方案。

我该如何解决这个问题? 我想过2个解决方案: 1) 使用 history.js / modernizr 在旧浏览器上填充 pushState

2) 找到一种方法来检查请求是否由 turbolinks/pjax 完成...并使用条件渲染或 redirect_to

  • 但我不知道该怎么做,因为 turbolinks 不发送 像 jquery-pjax 这样的特定标头

有什么建议吗?我真的很感激!

PS:请不要给我推荐backbone/angular/ember/react,我已经知道它们(backbone),但我想试试turbolinks。

【问题讨论】:

  • 你在哪里能弄明白?

标签: ruby-on-rails pushstate turbolinks


【解决方案1】:

您的第一直觉是对的,使用 IE8,您将需要modernizr。问题既不是你的代码也不是 turbolinks,而是 IE8。

PS:Turbolinks 实际上并没有取代 JS 框架,如果你愿意的话,你可以完美地使用其中之一。我确实将它与 React 和 Angular 一起使用。 Turbolinks 只是避免多次重新加载相同的内容(感觉已经很神奇了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 2023-03-11
    • 2011-03-22
    • 2011-07-23
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多