Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails技术在重定向后执行javascript_Javascript_Jquery_Ruby On Rails - Fatal编程技术网

Rails技术在重定向后执行javascript

Rails技术在重定向后执行javascript,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,Rails应用程序(3.2.8)和TurboLink(不确定是否相关)已启用 我有一些信息,在用户显示页面上有一个链接。(例如,某事物已发生变化的通知。) 当用户点击链接时,我想引导他进入页面和 视觉上突出显示已更改的元素。 目前我正计划这样处理: 创建链接,使其具有以下形式: project2/comment.1453 创建一个通知控制器,它获取项目2和更改类型注释及其id1453。因此,理论上我想重定向到projects2,并突出显示该页面上id为1453的注释。问题是:重定向后,如何突出显

Rails应用程序(3.2.8)和TurboLink(不确定是否相关)已启用

  • 我有一些信息,在用户显示页面上有一个
    链接
    。(例如,某事物已发生变化的通知。)
  • 当用户点击链接时,我想引导他进入页面
  • 视觉上突出显示已更改的元素。
  • 目前我正计划这样处理:

    创建链接,使其具有以下形式:

    project2/comment.1453

    创建一个
    通知控制器,
    它获取
    项目2
    和更改类型
    注释
    及其id
    1453
    。因此,理论上我想重定向到
    projects2
    ,并突出显示该页面上id为1453的注释。问题是:重定向后,如何突出显示注释

    notificationscontroller.rb(伪代码!)

    在我的研究中,我遇到了主干网,看起来主干网路由器可以通过使用一个函数(突出显示注释)响应url来解决这个问题。但我没有任何脊梁骨方面的经验

    我不确定这种功能的一般方法是什么。并希望避免走上错误的道路。如果你能帮我,那就太好了


    编辑:有点像一个小问题:我不确定在
    评论中使用哪个字符。1453
    #
    更好的选择吗?(
    comment#1453

    在重定向后,除了在重定向到的页面上包含javascript之外,不能运行javascript

    您想要的是将信息从这个请求传递到下一个(重定向的)请求

    闪光灯是一种很好的方法。通常,您会将其用于短信:

    redirect_to project, notice: "Project foo bar message"
    

    没有任何东西可以阻止您在flash中使用其他标识符并将JSON存储在它们的内存中

    flash[:highlight_ids] = "[12, 43, 472, 482]"
    redirect_to project
    
    然后在布局或其他地方将此flash消息提取到JavaScript:

    var highlight_ids = <%= flash[:highlight_ids] %>;
    
    var highlight_id=;
    
    然后使用javascript魔术突出显示实际元素。

    可能的方法之一:

    在会话中或直接在cookie中存储id(以及可能的对象类型,如果需要突出显示的不仅仅是注释)(
    show
    action在伪代码中)

    在项目中,控制器
    显示
    操作

    def show
      ...
      if cookies[:highlight_id] and cookies[:highlight_type]
        @highlight_id = cookies[:highlight_id]
        @highlight_type = cookies[:highlight_type]
        cookies.delete[:highlight_id]
        cookies.delete[:highlight_type]
      end
    
    在评论视图中

    <div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...
    

    我觉得这比把信息储存在饼干里更干净,所以我接受这个答案。谢谢
    def show
      project = Project.find(params[:project_id])
      comment = Comment.find(params[:commment_id])
      cookies[:highlight_id] = comment.id
      cookies[:highlight_type] = 'Comment' # optionally
      redirect_to project
    end
    
    def show
      ...
      if cookies[:highlight_id] and cookies[:highlight_type]
        @highlight_id = cookies[:highlight_id]
        @highlight_type = cookies[:highlight_type]
        cookies.delete[:highlight_id]
        cookies.delete[:highlight_type]
      end
    
    <div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...
    
    def highlight(object, object_id, object_type)
      if object_id and object_type and object.is_a?(object_type.classify.constantize)
        'highlighted'
      end
    end