2011-08-05 3 views
1

次のjsonを出力するサーバーURLに接続するDojoグリッドがあります。 {identifier: "id" items:[{id: "1"、name: "John "、大学:{名前:" XXX "、住所:" YYY "}}]。Dojoグリッドネストされた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

これは、あなたが「フェッチ」メソッドへの単一の呼び出しですべての項目をフェッチするに役立つだろう。何らかの理由でjsonの構造が異なるため動作しない場合は、ItemFileReadStoreを引き続き使用し、json内のすべてのオブジェクトをループする関数を作成し、loadItemメソッドを使用してアイテムをこのように1つずつ追加します)それは美しいではないのですが、それは動作します:

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

私は、docでその部分を読んで、私は私の最初のポストから与えられたJSON構造でItemFileReadStoreを使用してみましたし、私はdoesnの(グリッドに「申し訳ありません、エラーが発生しました」と表示されます)私の主な問題は、gridlayoutではフィールド値を与え、ネストされたelemetsを "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 
      }]]; 
関連する問題