【问题标题】:jquery treeview in grailsgrails中的jquery树视图
【发布时间】:2011-03-10 08:30:31
【问题描述】:

我正在尝试在我的 grails 项目中实现async jQuery treeview。所以我的要求是在加载页面时我想提供以下结构:

-> Overview
-> Resources
  --> User Activity
  --> Network Sources

点击User Activity/Network Sources,它应该有以下孩子:

--> User Activity
  ---> By Day of Week
  ---> By Time of Day
  .....
--> Network Resources
  ---> By Day of Week
  ---> By Time of Day
  .....

现在资源的子列表应该来自控制器,因此我尝试使用以下代码:

<script type="text/javascript">
  function initTrees() {
                jQuery("#mixed").treeview({
                        url: "/.../.../getSubTreedata"
                })

        }
 $(document).ready(function(){
                initTrees();
        });
</script>

<ul id="mixed">
        <li><span>Overview</span></li>
        <li id="36" class="hasChildren">
            <span>Resources</span>
            <ul>
                       <li><span class="placeholder">&nbsp;</span></li>
            </ul>
        </li>
    </ul>

控制器有以下代码:

def getSubTreedata = {
        def jsonChild1 = [text:"By Day of Week"];
        def jsonChild2 = [text:"By Time of Day"];
        def jsonChild3 = [text:"Holiday"];
        def jsonChild4 = [text:"Weekend"];
        def jsonChild5 = [text:"Time Windows"];
        def jsonResult = [
            text: "User Activity",
            expanded : false,
            classes : "important",
            children : [jsonChild1,jsonChild2,jsonChild3,jsonChild4,jsonChild5],
        ]
        
        def convertedData = jsonResult as JSON
        convertedData = new StringBuffer(convertedData.toString()).insert(0, "[");
        convertedData = new StringBuffer(convertedData.toString()).insert(convertedData.length(), "]");
        println "convertedData = "+convertedData;
        render convertedData;

最终它的印刷 convertedData = convertedData = [{"text":"User Activity","expanded":false,"classes":"important","children":[{"text":"By Day of Week"},{"text":"By Time of Day"},{"text":"Holiday"},{"text":"Weekend"},{"text":"Time Windows"}]}]

但这不符合我的要求,我需要在控制器中创建一个数组并将其解析为 JSON 并返回...

任何帮助都将受到高度赞赏......

:更新: 现在我可以在 UI 上显示正确的树格式,但我的主要问题是如何显示所有孩子,即“按星期几”、“一天中的时间”等作为与 Ajax.Updater 的链接......我知道我需要更改实际上显示所有子项的 jquery.treeview.async.js 文件....但是我不知道如何将它们创建为链接并通过单击该链接来调用 Ajax.Updater ...

【问题讨论】:

    标签: jquery grails groovy treeview


    【解决方案1】:

    这行得通吗?

    def getSubTreedata = {
      def data = [ 
        [ text:     'User Activity', 
          expanded: 'false',
          classes:  'important',
          children: [
            [ text: "By Day of Week" ],
            [ text: "By Time of Day" ],
            [ text: "Holiday" ],
            [ text: "Weekend" ],
            [ text: "Time Windows" ],
          ]
        ]
      ]
      render data as JSON
    }
    

    ie:将所有内容包装在一个数组中,然后将其呈现为 JSON

    编辑:

    要让一些孩子可以点击,看起来你需要这样做:

    def getSubTreedata = {
      def data
      switch( param.root ) {
        case '1': // Day of week id
          data = [ [ text: 'Days of the week go in here' ] ]
          break
        case '2': // Time of day id
          data = [ [ text: 'Time of the day goes in here' ] ]
          break
        default: // No recognisable param.root, so render the root tree
          data = [ 
            [ text:     'User Activity', 
              expanded: 'false',
              classes:  'important',
              children: [
                [ text: "By Day of Week", id:'1', hasChildren:'true' ],
                [ text: "By Time of Day", id:'2', hasChildren:'true' ],
              ]
            ]
          ]
        }
      }
      render data as JSON
    }
    

    然后,这个方法在被调用时应该得到一个param.root 值,这样你就可以知道哪个节点被展开了

    【讨论】:

    • @tim 非常感谢您的快速响应..现在它按照我的要求显示...但我主要担心的是如何将所有孩子显示为链接而不是简单的跨度出现现在...?
    • 不确定,但猜测一下……如果将expanded:'false' 放在子地图元素中会发生什么?
    • @Nirmal 啊... Jut 在那个演示页面上使用了萤火虫...编辑了我的答案以展示如何做到这一点...
    • @tim 如果我想创建链接“按星期几”并在该链接上调用 Ajax.Updater 怎么办?我想我需要修改 jquery.treeview.async.js 文件...
    • 不确定我明白你的意思......最后一个例子不起作用吗?我不能在这里测试它,所以这只是一个猜测。这不是创建一个有 2 个节点的树,当这些节点被点击时,它们会为每个节点渲染一个子节点(通过对服务器的另一个调用)?
    【解决方案2】:

    最终通过覆盖 jquery.treeview.async.js 解决了它...在这个文件中我修改了 createNode 函数,默认情况下它添加了 span 标签,而不是我将它设为超链接...。

    现在代码看起来像:

    function createNode(parent) {
                var current;
    
                if(this.id && this.owner && this.menu){
                  if(this.menu=='users'){
                            current = $("<li/>").attr("id", this.id || "").html("<a class="+this.classes+" href=\"showDetails/\" onclick=\"jQuery.ajax({type:'POST',data:'employeeId="+this.id+"&resourceSel=All', url:'/Project/users/showDetails/',success:function(data,textStatus){jQuery('#behaviorDiv').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false;\">"+this.text+"</a>").appendTo(parent);
                    else{
                           current = $("<li/>").attr("id", this.id || "").html("<a class="+this.classes+" href=\"showActivityDetails/\" onclick=\"jQuery.ajax({type:'POST',data:'resourceName="+this.id+"&resourceSel=All', url:'/Project/resource/showActivityDetails/',success:function(data,textStatus){jQuery('#behaviorDiv').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false;\">"+this.text+"</a>").appendTo(parent);
                    }
    

    我的 gsp 有以下代码:

    函数初始化树(){ jQuery("#peerTreeView").treeview({ url: "/Project/peer/getSubTreeData", 阿贾克斯:{ 数据: { "peerName":'${peerName}' }, 类型:“帖子” } }) } jQuery(文档).ready(函数(){ 初始化树(); }); 资源
    •  
    ${g.message(code:'users.behavior.contentLabel')}
                }
    

    控制器内部的 getSubTreeData 操作有以下代码:

        def getSubTreeData = {
            def data = [
                [ text:'Peer Activity',
                    id : params.peerName,
                    owner : 'Resources',
                    expanded: false,
                    classes:  'icon-userActivity',
                    menu : 'peer',
                    children: [
                        [ text: "By Day of Week", classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "By Time of Day", classes:'icon-time', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "Holiday",        classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "Weekend",        classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "Daily",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "Weekly",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity'],
                        [ text: "Monthly",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'peerActivity']
    
                    ]
                ],
                [
                    text:'Network Sources',
                    id : params.peerName,
                    owner : 'Resources',
                    expanded: false,
                    classes:  'icon-networkSources',
                    menu : 'peer',
                    children: [
                        [ text: "By Day of Week", classes:'icon-date', id:params.peerName,  menu : 'peer', owner:'networkSources'],
                        [ text: "By Time of Day", classes:'icon-time', id:params.peerName,  menu : 'peer', owner:'networkSources'],
                        [ text: "Holiday",        classes:'icon-date', id:params.peerName,  menu : 'peer', owner:'networkSources'],
                        [ text: "Weekend",        classes:'icon-date', id:params.peerName,  menu : 'peer', owner:'networkSources'],
                        [ text: "Daily",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'networkSources'],
                        [ text: "Weekly",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'networkSources'],
                        [ text: "Monthly",   classes:'icon-date', id:params.peerName, menu : 'peer', owner:'networkSources']
                    ]
                ]
            ]
            render data as JSON
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多