Как использовать JsonRestStore с формой поиска и редактируемой сеткой данных
Я пытаюсь реализовать форму поиска, где результаты будут отображаться через сетку данных Dojo 1.6. У меня работает рендеринг, я делаю вызов ajax при отправке формы, а затем строю Datagrid в функции обратного вызова, используя ItemFileWriteStore.
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 извлекал данные при отправке формы поиска и на основе значений в форме поиска.
Заранее спасибо!
1 ответ
Я бы использовал магазин 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 / target должен быть вашим 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 для загрузки обновленного набора данных в сетку.