【问题标题】:RJS and Observer for Showing/Hiding a DIV用于显示/隐藏 DIV 的 RJS 和观察者
【发布时间】:2011-02-08 04:13:11
【问题描述】:

我有一个 RJS 模板,我基本上用它来执行以下操作:

淡出提交的表单 显示响应弹出 div 使用分部调出新表单

我想要做的是让 RJS 推迟显示第二个表单,直到用户单击弹出窗口上的“x”按钮。

目前的RJS代码如下:

unless @actor.health <= 0 || @actor.finished
  page.visual_effect(:fade, "act_form", :duration => 0.5)
  if @actor.acts.last.decision.consequence && @actor.acts.last.decision.consequence != ""
    page.insert_html :after, 'act_form_wrapper', :partial => 'consequence'
    page.assign 'popup', true
  end

  page.delay(1) do
    page.replace_html("act_form", :partial => 'act_form')
    if @prompt.decisions.count > 1
      page.assign 'decEmpty', true
    else
      page.assign 'decEmpty', false
    end
    if @actor.play.comment_req
      page << 'document.getElementById("act_comment").value = ""'
    end
    page.visual_effect(:appear, "act_form", :duration => 0.5)
  end

  page.replace_html("scores", :partial => 'scores')

else
  flash[:notice] = 'This game is finished. How did you do?'
  page.redirect_to(@actor)
end

弹出的 div 看起来像:

<span class="close_consequence"><%= link_to_function image_tag('close.png', :alt => 'close'), "$('.consequence_popup').remove(); popup=false;"  %></span>

我的想法是让“popup”Javascript 变量被某种 while 循环或观察者使用,如果它是真的会推迟,然后在它是假的时候运行。不确定这是否可行,或者我是否应该完全不同地这样做。 RJS 的东西对我来说仍然是个谜。

【问题讨论】:

    标签: javascript ruby-on-rails ajax observer-pattern rjs


    【解决方案1】:

    我会通过内联 CSS 隐藏新表单,然后让弹出窗口关闭也显示()新表单。

    <div id="new-form" style="display:none;">
      ...
    </div>
    
    <div id="popup">
      <div>A Popup!</div>
      <a href="#" onclick="$(this).hide(); $('new-form').show();">Dismiss me</a>
    </div>
    

    【讨论】:

    • 好主意,但在我的情况下,提交这些表单时并不总是显示弹出消息,因此并不总是一个关闭按钮来触发新表单的 show()。跨度>
    • 在这种情况下,我会在页面之后添加一个脚本,在该点同时呈现新表单和弹出窗口,这将检查弹出窗口是否存在, 如果新表单不存在,则显示()。
    • 紧急。这似乎可行,但我使用的是 JRails JQuery 库而不是原型,并且看起来没有办法在 page['consequence_popup'] 上调用 length 来检查它是否存在。我只是在 Firebug 中收到“jQuery("#consequence_popup").length 不是函数”错误。
    • 在您的原始代码中,您通过类名而不是 ID 来引用它...应该改为 $('.consequence_popup'),而不是 $('#consequence_popup') 吗?
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多