Próbuję nauczyć się korzystać z siatki EXTJS dla niektórych prostych operacji CRUD nad tabelą w aplikacji administratora.EXTJS + Aktualizowanie sklepu z identyfikatorem bazy danych po zapisaniu siatki
Mam proste siatki, która pozwala użytkownikom edytować ktoś, sklep jest zdefiniowany jako:
var userDataStore = new Ext.data.Store({
id: 'userDataStore',
autoSave: false,
batch: true,
proxy: new Ext.data.HttpProxy({
api: {
read: '/Admin/Users/All',
create: '/Admin/Users/Save',
update: '/Admin/Users/Save'
}
}),
reader: new Ext.data.JsonReader(
{
root: 'Data',
idProperty: 'ID',
totalProperty: 'total',
successProperty: 'success',
messageProperty: 'message'
}, [
{ name: 'ID', type: 'string', allowBlanks: false },
{ name: 'NT_ID', type: 'string', allowBlank: false },
{ name: 'EMail', type: 'string', allowBlank: false },
{ name: 'Name', type: 'string', allowBlank: false },
{ name: 'Enabled', type: 'bool', allowBlank: false },
{ name: 'CurrentRoleCode', type: 'string', allowBlank: false}]
),
writer: new Ext.data.JsonWriter(
{
encode: false,
writeAllFields: true,
listful: true
})
});
ten jest zobowiązany do siatki, a ja jestem w stanie załadować i zapisać użytkownikom bez problemu. Przycisk Zapisz wygląda następująco:
var saveButton = new Ext.Button({
text: 'Save',
disabled: true,
handler: function() {
userDataStore.save();
pageState.ClearDirty();
saveButton.disable();
}
});
Jednak podczas tworzenia nowego użytkownika, JSON POST dla użytkownika jest wysyłany do tego samego punktu końcowego usługi REST jako „Update”, z tą tylko różnicą, że bez ID wartość została zaksięgowana (ponieważ jest ustawiona tylko w magazynie przy ładowaniu z serwera).
To działa, a ja jestem w stanie tworzyć użytkowników.
Zapisana usługa REST wysyła ponownie utworzony wiersz z nowym identyfikatorem bazy danych, a ja byłem przy założeniu, że EXTJS automatycznie powiąza nowy wygenerowany identyfikator bazy danych z wierszem. Umożliwia to użytkownikowi dalszą edycję tego wiersza i powoduje aktualizację zamiast wstawki.
Zamiast tego wiersz nadal ma pusty identyfikator użytkownika, więc dodatkowe zapisanie tworzy kolejnego nowego użytkownika.
Więc albo:
- ExtJS ma rozwiązać rząd ID wygenerowane automatycznie i jestem po prostu robi coś złego.
- Mam ręcznie przeładować siatkę po każdym zapisaniu z dodatkowym wywołaniem REST.
Przeglądałem dokumentację i fora EXTJS, ale nie mam pewności co do właściwego podejścia.
Czy ktoś może wyjaśnić?
EDYCJA: Próbowałem powrócić Sukces = Prawda w JSON, aby dopasować SuccessProperty, jednak nadal nie działa.
EDIT # 2: Do tej pory jedyną rzeczą, którą udało mi się znaleźć, jest wykonanie "userDataStore.reload()" po zapisaniu, jednak ponieważ zwróciłem zawartość sklepu z powrotem po zapisaniu, miałem nadzieję, że EXTJS zrozumie to i zaktualizuje wartości wierszy.