2012-03-11 25 views
0

我想在道场创建一个动态网格。基本上,我有一个选择表单和一个网格,当我选择一个选择选项时,我希望网格加载一个不同的数据集。网格与选择在道场

代码:

contentPane = new ContentPane({ 
     title: "Group 1", 
    }); 

//Create grid 
function genGrid(dataframe){ 
    alert(dataframe); 
    myStore = Cache(JsonRest({target:"/data/"+dataframe}), Memory()); 
    return grid = new DataGrid({ 
     store: dataStore = ObjectStore({objectStore: myStore}), 
     structure:[{"field": "division", "name": "division", "width": "200px"}, {"field": "country", "name": "country", "width": "200px"}, {"field": "sales", "name": "sales", "width": "200px"}, {"field": "cost", "name": "cost", "width": "200px"}]}, 
    "target-node-id").placeAt(contentPane.containerNode);}; 

sel = new Select({ 
     name: 'select2', 
     onChange: function(select){alert(select); 
                               genGrid(select)}, 
     options: [ 
      { label: 'TN', value: 'Tennessee' }, 
      { label: 'VA', value: 'Virginia', selected: true }, 
      { label: 'WA', value: 'Washington' }, 
      { label: 'FL', value: 'Florida' }, 
      { label: 'CA', value: 'csvtable' }] 
       }).placeAt(contentPane.containerNode); 


contentTabs.addChild(contentPane); 

但是,此代码不能正常工作。如果我在sel onChange属性之外调用genGrid(dataframe),则会出现网格,但当选择select中的选项时它不会更改。

我怀疑这里的问题是我如何将网格和选择附加到内容面板,但我找不到更好的方法来做到这一点。

回答

1

1)dojo小部件需要一个DOM节点作为小部件的占位符。你的“target-node-id”是否是一个具有该id的实际DOM元素?如果没有,网格将无法很好地渲染 当填充网格时,您不需要任何位置调用 - dojo将用datagrid替换具有id target-node-id的DOM元素。 如果你是以编程方式完成这一切,我建议做一个id为target-node-id的document.createElement('div'),例如, 将它附加到你的html中的父节点,然后创建datagrid指定target-node-id作为要替换的DOM节点

2)在选择onChange事件处理程序中,不需要创建新的数据网格。 你只需要更新商店 - datagrid会自动更新(这是使用像dojo这样的工具包的好处) 取决于你的用例,你甚至可以重用同一个商店,只是改变其中的数据 (设置clearonclose如果它是一个itemfilereadstore,则存储) 有关如何用新数据重新填充网格的示例,请参阅Dojo - How to refresh combobox with updated ItemFileReadStore data

+0

谢谢,现在情况更加清晰。是的,我包含div target-node-id。我现在明白,我只需要更新商店。你会怎么做一个jsonrest商店?我找不到关于此的文档。 – kfk 2012-03-12 06:58:49