0

我正在尝试实现一个搜索表单,其中结果将通过 dojo 1.6 数据网格显示。我有渲染工作,我对表单提交进行了 ajax 调用,然后使用 ItemFileWriteStore 在回调函数中构建了一个 Datagrid。

 function search()
{
    var action = './search.json';
    dojo.xhrPost({url: action, form:"searchForm",
                    load: function(result) {
                                            var newStore = new dojo.data.ItemFileWriteStore({
                                                data: {
                                                    identifier: "id", 
                                                   items: JSON.parse(result),
                                                   url:'./search.json'
                                                }
                                            });
                                            var grid = dijit.byId("searchResultsGrid");

                                            if(grid == null) {
                                                var layout = [[
                                                      {'name': 'Id', 'field': 'id', 'width': '50px'},
                                                      {'name': 'Name', 'field': 'name', 'width': '50px',editable: true,},
                                                      {'name': 'Source', 'field': 'source', 'width': '50px',editable: true,},
                                                      {'name': 'Version', 'field': 'version', 'width': '50px',editable: true,}
                                                    ]];

                                                var grid = new dojox.grid.DataGrid({
                                                    id: 'searchResultsGrid',
                                                    store: newStore,
                                                    structure: layout,
                                                    autoHeight:true, autoWidth:true, editable:true, columnReordering:true,
                                                    rowSelector: '20px'
                                                });
                                                grid.placeAt("gridDiv");
                                                grid.startup();
                                            }
                                            else {
                                                grid.setStore(newStore);
                                            }
                                         }
    });
}

现在,当我尝试使网格可编辑并将更改保存到服务器时,ItemFileWriteStore 没有任何反应。所以我想切换到 JsonRestStore 以便我可以坚持。

但问题是,如何将我的表单提交绑定到 JsonRestStore 或者换句话说有没有办法将动态查询传递给 JsonRestStore ?我希望 JsonRestStore 在提交我的搜索表单时并根据搜索表单中的值获取数据。

提前致谢!

4

1 回答 1

0

我会使用 dojo.store.JsonRest 商店。为了将 JsonRest 存储与 dojox.grid.DataGrid 一起使用,您需要将其包装在 dojo.data.ObjecStore 中,如下所示:

var newStore = new dojo.store.JsonRest({
    target: '/search/',
    idProperty: 'id'
});
newStore = new dojo.data.ObjectStore({
    objectStore: newStore
});

现在 /search/ 目标应该是您的 REST url。您的 /search/ 后端应该能够支持 REST,这意味着您应该能够支持 GET、PUT、POST、DELETE 请求。看一下http://dojotoolkit.org/reference-guide/1.10/quickstart/rest.html它的 Dojo 1.10,但是实现后端的方法应该是类似的。

一旦您实现了 REST 后端以能够检索和更新数据。您可以通过在网格中设置查询参数将查询参数发送到 REST 后端。

grid.setQuery({
   param1: 1,
   param2: 2
});

这将触发 JsonRest 存储使用 url /search/?param1=1¶m2=2 来加载网格中的刷新数据集。

于 2014-07-24T05:29:22.560 回答