将模型传递给Grails中添加到DOM弹出窗口

时间:2014-02-15 00:45:14

标签: javascript jquery grails

问题在于:

我有一个页面,例如www.app.com/home,我有一些窗口通过jquery以幻灯片方式添加到DOM。其中一个窗口具有查看联系人的Gmail帐户的功能。

这是以这种方式完成的:

  1. 用户在主页。
  2. 点击搜索“好友”按钮,以及一个包含许多选项的窗口 幻灯片(由jquery添加,rthe内容在另一个.gsp中)
  3. 点击选项gmail,它会重定向到googles oauth, 权限和帐户选择,他必须接受访问权限 到他/她的联系人名单。
  4. 一旦被接受,它会再次重定向到我的主页,我有一个 var知道它是否来自谷歌的回调,所以我运行了脚本 再次显示弹出窗口。
  5. 我遇到的问题是,从主页本身,我可以访问具有$ {friendList}的控制器传递的模型,但是当我向弹出窗口添加一些代码时,$ {friendList}是未被发现。

1 个答案:

答案 0 :(得分:0)

我过去曾使用grails渲染模板来解决这个问题。你可以有一个隐藏的div,jquery在弹出时会取消隐藏。 e.g

<div id="theSlideWindow" style="display:none">
    <g:render template="gsptemplate"  collection="${friendList}" var="myfriend" />
</div>

现在,当单击该按钮时,jquery将取消隐藏div并为其设置动画,但是您要为其设置动画。现在这不是很有效,这取决于friendList的大小,因为每次刷新都会加载它。

但是你仍然可以通过执行以下操作来使jquery加载工作:

  1. 将用户ID添加到隐藏的输入中。

    <input type="hidden" value="${userid}"/>
    
  2. 使用jquery,所以将id作为参数发送:

    $('button').click(function() {
        var page = "gspurl/show?userid=" + $("#hidden").val();
        $("div").load(page, function(response, status, xhr) {
         //do something here
        });
        return false;
    });
    
  3. 在你的gsp中使用userid加载friendList。

  4. 另一种选择是使用一个返回html或json而不是gsp的控制器。

    显然,有几种不同的传递friendList的方法,但希望这会给你一些想法。