在jquery选项卡中显示Grails域

时间:2013-01-22 21:25:22

标签: jquery-ui grails

在JQuery UI标签中显示Grails数据库中数据的最佳方法是什么?我想要的是有一个标签界面,每个标签上都有一个来自不同域的记录列表。例如,Tab1显示Domain1的记录列表,Tab2显示Domain2的记录列表等

我已经设置并运行了JQuery UI选项卡界面,并且当前正在使用createLink从控制器调用该方法以返回相应域的模型。选项卡如下所示:

<div id="tabs">
    <ul>
        <li><a href="${createLink(action: 'listHardware')}">Hardware records</a></li>
        <li><a href="${createLink(action:'listModel')}">Model records</a></li>
        <li><a href="${createLink(action:'listBuilding')}">Building records</a></li>

    </ul>       
</div>

来自控制器的方法如下所示:

def listHardware() {
    [hardwareList:Hardware.list(), hardwareInstanceTotal:Hardware.count()]      
}

我还使用“render(view:'HardwareList',model:[hardwareList:Hardware.list(),hardwareInstanceTotal:Hardware.count()]”在标签中渲染整个GSP,但是每次选择选项卡时都需要花费很长时间(至少5秒)加载并且完全不理想,特别是如果每​​个选项卡花费那么长时间。

更新

正如我在下面对Rimero的答案的一个答案中所提到的,我能够使用模板来显示我的域数据的表格。我也尝试使用标签在每个选项卡上实现分页,但每次单击其中一个页面以查看另一个页面时,它会将我带到选项卡界面之外的完整模板。 有关如何格式化标记以使所有内容都保留在标签内的任何想法吗?

1 个答案:

答案 0 :(得分:1)

这是我的建议:

  • 例如,您可以在索引方法中一次在控制器中获取所有内容。
  • 您可以将标签内容实现为模板 (g渲染模板)。每个标签== 1模板。
  • 您可以获取域对象buildingList, 来自控制器的索引方法等。
  • 每个标签的g:渲染模板代码可能只需要传递一个地图或一个集合进行渲染。

在这种情况下,您不需要指向控制器端点的超链接。你只需保留标签(div id)的锚点,就像这里的默认示例一样 - &gt; http://jqueryui.com/tabs/

更新的答案

正如您所说,一次发送所有数据需要很长时间,您可以异步获取它。如果可能,直接仅为第一个选项卡填充数据。

  • 为每个选项卡创建一个业务方法,将模型作为JSON返回,仅在尚未从服务器检索数据时获取数据(需要保持状态或查看例如选项卡ID是否具有某些DOM节点

  • 使用JQuery,当DOM准备就绪时,获取当前选项卡,如果您没有急切地获取第一个选项卡的数据,请在忙碌图像旋转的时刻获取它。

    < / LI>
  • 一旦选择了新选项卡,就需要检查数据是否已被提取,如果没有,则发送ajax调用,然后回调函数填充tab div容器中的数据。 / p>

希望它有所帮助。