【问题标题】:dojo lazytreegrid data from server来自服务器的 dojo lazytreegrid 数据
【发布时间】:2013-04-10 07:50:23
【问题描述】:

我是dojo的新手,我正在尝试使用lazytreegrid,我在文档中找到了这个示例代码

http://dojotoolkit.org/reference-guide/1.7/dojox/grid/LazyTreeGrid.html

但我想从 java 的 servlet/portlet/ 加载树数据,并且子节点应该是延迟加载的。找不到任何简单的例子表明这是可以做到的

【问题讨论】:

    标签: dojo dojox.grid


    【解决方案1】:

    我已经修改了http://dojotoolkit.org/reference-guide/1.9/dojox/grid/LazyTreeGrid.html 提供的示例,使其能够与 QueryReadStore 一起使用,后者以 JSON 格式从后端服务获取数据。

    我的示例服务以以下格式返回数据:

    {"identifier":"id","label":"name","items":[{"name":"Africa","id":1,"type":"CONTINENT","population":null,"area":null,"hasChildren":true},{"name":"Asia","id":8,"type":"CONTINENT","population":null,"area":null,"hasChildren":true}]}
    

    请注意,与 ItemFileWriteStore 示例不同,子元素不是内联填充的。

    现在网页代码:

    // Dependencies
    dojo.require("dojox.grid.LazyTreeGrid");
    dojo.require("dojox.grid.LazyTreeGridStoreModel");
    dojo.require("dojox.data.QueryReadStore");
    .
    .
    .
    // Use QueryReadStore instead of ItemFileWriteStore.
    // The URL points to a service that returns root nodes of the tree in JSON format.
    // When a node is expanded, the same URL gets called with an extra parameter 
    // called parentId=<id> where id is identifier of the clicked row. The service
    // should return children of the specified id.
    var store = new dojox.data.QueryReadStore({url: "./admin/getRootNodes.json",
                 requestMethod: "get" });
    
    // hasChildren field in the JSON response should be boolean (true - has children, false otherwise)
    var model = new dojox.grid.LazyTreeGridStoreModel({
          store: store,
          serverStore: true,
          childrenAttrs: ['hasChildren']
        });
    
    /* set up layout */
    var layout = [
      {name: 'Name', field: 'name', width: '30%'},
      {name: 'Type', field: 'type', width: '30%'},
      {name: 'Area', field: 'area', width: '20%'},
      {name: 'Population', field: 'population', width: '20%'}
    ];
    /* create a new grid: */
    var grid = new dojox.grid.LazyTreeGrid({
        id: 'grid',
        treeModel: model,
        structure: layout,
        rowSelector: '20px',
      }, document.createElement('div'));
    
    /* append the new grid to the div */
    dojo.byId("gridDiv").appendChild(grid.domNode);
    
    /* Call startup() to render the grid */
    grid.startup();
    

    【讨论】:

      【解决方案2】:

      第一:

      您的 Servlet 必须以 json / xml 格式输出某些内容并将其作为 weburl 提供。

      例如网址http://api.geonames.org/citiesJSON

      输出:

      {"status":{"message":"请为每次通话添加用户名,以便 地理名称能够识别调用应用程序并计算 积分使用情况。","value":10}}

      当您在网络浏览器中访问 url 时,您的 servlet 应该具有相同的行为(当然不是相同的数据)。

      下一步:

      将网格与 JsonRestStore 一起用作存储,而不是与 ItemFileWriteStore 一起使用。我的示例使用 DataGrid,但 LazyTreeGrid 应该与 JsonRestStore 以相同的方式工作......

      require(["dojo/ready","dojo/aspect",'dojo/_base/lang', 'dojo/topic', 'dojox/grid/DataGrid'  ,'dojo/store/JsonRest','dojo/data/ObjectStore'],
        function(ready,aspect,lang,topic, DataGrid, JsonRest,ObjectStore){
      
          ready(1,function() {
      
          var store = new JsonRest({  
                  target: "http://yourUrl",
                  sortParam: "sortby"
            });
      
      
          var layout = [[
          {'name': ' ', 'field': 'extension', 'width': '20px',noresize:true} // Adapt field to json data
      
          ]];
      
       var dataStore=ObjectStore({objectStore: store});
      
              var grid = new DataGrid({
                  store:dataStore,
                  queryTarget:"objectId",
                  structure: layout});
      
          grid.setQuery({objectId:"1"}); // First QUERY !
          grid.placeAt("myDivId");
          grid.startup();
      
          });
      
      });
      

      【讨论】:

      • 我正在尝试在 TreeModel 部分中使用dojotoolkit.org/reference-guide/1.7/dojox/grid/… 此处给出的示例,它说我们可以使用 dojox.grid.LazyTreeGridStoreModel,但如何使用尚不清楚,任何建议
      • 我正在尝试像这样使用它 var dataStore = new QueryReadStore({url: ""}); var treeModel = new LazyTreeGridStoreModel({store: dataStore, childrenAttrs: ['children'], serverStore: true}); var grid = new LazyTreeGrid({ treeModel: treeModel, structure: layout, autoHeight: 20}, "gridContainerId");网格.启动();但我在浏览器中收到 javascript 错误,
      • 但我在浏览器中收到 javascript 错误,QueryReadStore 未定义但我可以看到 QueryReadStore js 正在加载到 firebug 中
      • 需要在require语句中加载
      • 我有这样的 dojo.require("dojox.data.QueryReadStore");
      猜你喜欢
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多