弹出窗口的视图帮助

时间:2011-01-09 06:08:39

标签: ruby-on-rails jquery-ui

Rails 2.3.5(工作服务器,无法选择Rails 3)。目前我还在使用Prototype,但刚刚添加了JQuery(noconflict)来试验它的UI对话框。我是一个没有javascript或JQuery经验的新手,还有几个月的Rails经验。

我有一个列出'团队'的索引页面。列表不显示所有信息,并且文本字段被截断。因此,在每个“团队”列表中,我有一个显示和编辑链接转到弹出窗口:

<%= link_to "Team_Details", {:controller => 'teams', :action => 'show', :id => t.id},
popup => ['show','toolbar=no,location=no,directories=no,status=no,
menubar=no,scrollbars=yes,resizable=yes,autosize=yes'] %>

我被困的地方是:

  • 弹出打开中心屏幕
  • 制作弹出式自动尺寸
  • link_to标题不起作用(似乎是 由视图标题覆盖)
  • 一般外观不是很好(没有动画可以打开/关闭)

我尝试在JQuery UI对话框中使用它,但我只能打开一个空的对话框窗口。我认为能够打开弹出窗口的视图会很常见,因为那里会有很多Google信息,但今晚我没有运气。我发现的很多信息都是关于在UI对话框中显示隐藏div的内容。

我想我想知道去哪儿方向?我只想将一个:id param传递给一个视图,并在弹出窗口中显示该视图。如果JQuery UI Dialog是一个很好的方法,那么这里有一个简单的用法示例吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我会在jQuery UI灯箱中使用不引人注目的javascript,或者使用:

http://colorpowered.com/colorbox/

如果使用最新版本,请不要忘记将布局设置为false。

答案 1 :(得分:1)

如果其他人都在寻找link_to弹出助手的帮助,我发现的最大问题是,如果用户在没有关闭弹出窗口的情况下点击浏览器,弹出窗口将失去焦点并进入浏览器。然后,如果打开一个新的弹出窗口,它将加载到现有的弹出窗口中。这似乎很难让用户感到困惑,因为他们可能只是认为新的弹出窗口从未打开过。为了解决这个问题,IE 6/7/8在window.onblur事件中有一个错误。当内容更改时,该错误将关闭窗口。因此,如果您允许用户在show&amp; amp;在poup窗口中编辑,该更改将关闭IE中的弹出窗口。

我发现脚本(用于IE 6/7/8的IE onblur修复)会处理所有事情:

来自Vladimir Kelman http://pro-thoughts.blogspot.com/2006/10/incorrect-behavior-of-windowonblur.html

<head>
     <script type="text/javascript">
          var active_element;
          var bIsMSIE;

          function initiateSelfClosing() {
              if (navigator.appName == "Microsoft Internet Explorer") {
                  active_element = document.activeElement;
                  document.onfocusout = closeWnd;
                  bIsMSIE = true;
                  }
                    else { window.onblur = closeWnd; }
                  }

                  function closeWnd() {
                  if (window.opener != null) {
                  if (bIsMSIE && (active_element != document.activeElement)) {
                    active_element = document.activeElement;
                  }
                      else {
                      window.close();
                  }
              }
          }
      </script>

<body onload="initiateSelfClosing()">

stuff

<body/>