2011-08-05 41 views
1

我想要一個dojo網格,它連接到一個服務器url輸出下面的json: {identifier:「id」 items:[{id:「1」,name:「John 「,大學:{姓名:」XXX「,地址:」YYY「}}]。Dojo grid嵌套json

基本上我有一個嵌套的JSON。我想將大學名稱和大學地址作爲網格中的單獨列。

我嘗試使用dojox.grid.DataGrid對象並創建一個網格佈局,但不知道如何引用嵌套的elments和university.name和university.address似乎沒有工作。 我正在使用dojo 1.6.1。

有人有指點嗎?

這是JS代碼我使用:

dojo.require("dojox.grid.DataGrid"); 
    dojo.require("dojo.data.ItemFileReadStore"); 

    dojo.addOnLoad(function(){ 
    // our test data store for this example: 
    var jsonStore = new dojo.data.ItemFileReadStore({ 
     url: '/MainDeployer/ajax/users/get.json' 
    }); 

    var layoutUsers = [ 
     [{ 
       field: "name", 
       name: "Name", 
       width: 10 
      }, 
      { 
       field: "university.name", 
       name: "University Name", 
       width: 10 
      }, 
      { 
       field: "university.address", 
       name: "University Address", 
       width: 'auto' 
      }]]; 

    // create a new grid: 
    var grid = new dojox.grid.DataGrid({ 
     query: {}, 
     store: jsonStore, 
     clientSort: true, 
     rowSelector: '20px', 
     structure: layoutUsers 
    }, 
    document.createElement('div')); 

    dojo.byId("usersTable").appendChild(grid.domNode); 

    grid.startup(); 
}); 

感謝, 克里斯蒂安

您正在使用什麼類型的商店

回答

3

?看看dojo.data.ItemFileReadStore文檔,有一個像你這樣的情況的例子: http://dojotoolkit.org/reference-guide/dojo/data/ItemFileReadStore.html#item-structure

這將幫助您通過一次調用「fetch」來獲取所有項目。如果由於某些原因,由於json結構不同,它不能工作,您可以繼續使用ItemFileReadStore,並創建一個循環遍歷json中所有對象的函數,並使用loadItem方法以這種方式逐個添加項目它不漂亮,但它的工作原理):

var myData = {"items" : []}; 
var myStore = new dojo.data.ItemFileWriteStore({data: myData}); 
var myLayout = [{ 
    field: 'name', 
    name: 'Name', 
    width: '200px' 
}, 
{ 
field: 'universityName', 
name: 'University Name', 
width: '100px' 
}, 
{ 
field: 'universityAddress', 
name: 'University Address', 
width: '60px' 
}]; 
var myGrid; 

dojo.addOnLoad(function(){ 
    myGrid = new dojox.grid.DataGrid({ 
     store: myStore, 
     structure: myLayout 
    }, document.createElement('div')); 
    dojo.byId("myGridContainer").appendChild(myGrid.domNode); 
    myGrid.startup(); 

    dojo.xhrGet({ 
     url: myURL, 
     handleAs: "json", 
     headers: { 
      "Content-Type": "application/json; charset=uft-8", 
      "Accept" : "application/json" 
     }, 
     load: function(responseObject, ioArgs) { 
      myList = responseObject; 
      dojo.forEach(myList.items, function(element) {  
       myStore.newItem({"name": element.name, 
        "universityName": element.university.name, 
        "universityAddress": element.university.address}); 
      }); 
     }) 
    }); 
} 
+0

我讀的文檔的部分,我嘗試使用ItemFileReadStore與給定的JSON結構從我的第一篇文章,我沒有按沒有工作(在網格中給出「抱歉,遇到錯誤」)。我認爲我的主要問題是在網格佈局中,我應該給出一個字段值來映射嵌套元素,我以「university.name」的形式進行映射,但我不認爲這是映射的方式他們 –

+0

它應該確實工作。你可以隔離這部分代碼併發布它嗎? – perissf

+0

將其添加到開始帖子中。 –

2

SE格式化:

var nameFormatter = function(value, rowIdx){ 
     return value.name; 
    }; 
    var addressFormatter = function(value, rowIdx){ 
     return value.address; 
    }; 

    var layoutUsers = [ 
     [{ 
       field: "name", 
       name: "Name", 
       width: 10 
      }, 
      { 
       field: "university", 
       name: "University Name", 
       width: 10, 
       formatter: nameFormatter 
      }, 
      { 
       field: "university", 
       name: "University Address", 
       width: 'auto', 
       formatter: addressFormatter 
      }]];