2011-05-17 57 views
0

我有以下JSON數據:使用dojo的datagrid和itemfilewritestore,可以在生成網格時訪問父數據嗎?

{identifier: "name", 
label: "name", 
items: [ 
     {"name": "ETL Processing", "type":"task", "startTime":"03:00:00", "endTime":"","status":"Running","totalJobs":"0","completeJobs":"0", 
     children:[{_reference:"SubTaskName1"},{_reference:"SubTaskName2"},{_reference:"SubTaskName3"}]}, 
     {"name": "SubTaskName1","type":"subtask","startTime":"value","endTime":"value","status":"Done","totalJobs":"10","completeJobs":"10", 
     children: [{_reference:"jobName1"},{_reference:"jobName2"},{_reference:"jobName3"}]}, 
     {"name": "SubTaskName2","type":"subtask","startTime":"value","endTime":"value","status":"Running","totalJobs":"20","completeJobs":"7", 
     children: [{_reference:"jobName4"},{_reference:"jobName5"},{_reference:"jobName6"}]}, 
     {"name": "SubTaskName3","type":"subtask","startTime":"value","endTime":"value","status":"Pending","totalJobs":"45","completeJobs":"0", 
     children: [{_reference:"jobName8"},{_reference:"jobName7"}]}, 
     {"name": "jobName1","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName2","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName3","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName4","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"15","memory":"4","logFile":"path"}, 
     {"name": "jobName5","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"40","memory":"23","logFile":"path"}, 
     {"name": "jobName6","type":"job","startTime":"value","endTime":"value","status":"Pending","cpu":"0","memory":"1","logFile":"path"}, 
     {"name": "jobName7","type":"job","startTime":"value","endTime":"value","status":"Pending","cpu":"0","memory":"1","logFile":"path"}, 
     {"name": "jobName8","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"12","memory":"4","logFile":"path"}, 
]} 

這個數據首先被送入itemfilewritestore,然後被裝入一個DataGrid呈現給用戶:

this.taskGrid = new dojox.grid.DataGrid({query:{type:"job"}, 
           store: TM.getCurrentTask().getTaskStore(), 
           //autoWidth:true, 
           //autoHeight:true, 
           sortInfo: 2, //Sort by the start time 
           clientSort:true, 
           loadingMessage:"Loading...", 
           noDataMessage:"No Task Data Found", 
           rowSelector:true, 
           structure: jobGridLayout}, 
            document.createElement("div")); 

DataGrid的佈局只是吐奶將所有工作數據提供給用戶。作爲數據網格的一部分,我還希望包含作業子任務的名稱(它是JSON結果中的父項)。

是否有可能在查詢或佈局中引用個別作業的父級子任務名稱,還是僅需要在各個作業數據中包含子任務名稱?

回答

0

我在我的一個應用程序中使用this.store._getNewFileContentString()將商店數據轉換回json。可能從那裏得到你想要的。我不確定這是否會對你有所幫助,因爲我現在無法測試它。

0

我正在通過這一段時間,並得到了下面的意見。

1)我們需要查詢商店的力量,所以我們必須使用dojo.store.Memory這是dojo對象存儲的實現。

memoryStore = new dojo.store.Memory({ 
    data : [ 
     {"name": "ETL Processing", "type":"task", "startTime":"03:00:00", "endTime":"","status":"Running","totalJobs":"0","completeJobs":"0", 
     children:[{_reference:"SubTaskName1"},{_reference:"SubTaskName2"},{_reference:"SubTaskName3"}]}, 
     {"name": "SubTaskName1","type":"subtask","startTime":"value","endTime":"value","status":"Done","totalJobs":"10","completeJobs":"10", 
     children: [{_reference:"jobName1"},{_reference:"jobName2"},{_reference:"jobName3"}]}, 
     {"name": "SubTaskName2","type":"subtask","startTime":"value","endTime":"value","status":"Running","totalJobs":"20","completeJobs":"7", 
     children: [{_reference:"jobName4"},{_reference:"jobName5"},{_reference:"jobName6"}]}, 
     {"name": "SubTaskName3","type":"subtask","startTime":"value","endTime":"value","status":"Pending","totalJobs":"45","completeJobs":"0", 
     children: [{_reference:"jobName8"},{_reference:"jobName7"}]}, 
     {"name": "jobName1","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName2","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName3","type":"job","startTime":"value","endTime":"value","status":"Done","cpu":"0","memory":"0","logFile":"path"}, 
     {"name": "jobName4","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"15","memory":"4","logFile":"path"}, 
     {"name": "jobName5","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"40","memory":"23","logFile":"path"}, 
     {"name": "jobName6","type":"job","startTime":"value","endTime":"value","status":"Pending","cpu":"0","memory":"1","logFile":"path"}, 
     {"name": "jobName7","type":"job","startTime":"value","endTime":"value","status":"Pending","cpu":"0","memory":"1","logFile":"path"}, 
     {"name": "jobName8","type":"job","startTime":"value","endTime":"value","status":"Running","cpu":"12","memory":"4","logFile":"path"}, 
    ] 
}) 

2)找出所有子任務的這樣

subtsk = memoryStore.query({ 
    "type":"subtask" 
}); 

3名單)定義在網格單元或子行,像這樣

{ 
    field: 'subtask', 
    name: 'Sub Task Name', 
    width: '150px', 
    formatter:function(a,b,c){ 
     var jobName = this.grid.store.getValue(this.grid.getItem(b),"name"); 
     var subTask = "" 
     dojo.forEach(subtsk,function(a){ 
      dojo.forEach(a.children,function(b,c){ 
       if(b._reference == jobName){ 
        if(!subTask) 
        subTask = a.name;        
        //console.log(a.name) 
       } 
      }) 
     }) 
     return subTask; 

    } 

} 

我顯示的子任務格式化名稱作爲新的子行。而且,我還不確定這是否是更有效的方式來完成這項任務。如果有任何問題,請發帖。我能夠成功獲取Sub任務名稱。

相關問題