在dojo中选择网格

时间:2012-03-11 11:11:43

标签: javascript dojo grid

我正在尝试在dojo中创建动态网格。基本上,我有一个选择表单和一个网格,当我选择一个选择选项时,我希望网格加载一个不同的数据集。

代码:

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中选择选项时它不会改变。

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

1 个答案:

答案 0 :(得分:1)

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

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