2010-09-14 10 views
9

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.

Odpowiedz

-1

Potrzebujesz przeładować magazyn z nowymi parametrami w obsłudze savebtn jak store.reload();

oczywiście można dodać więcej params załadować akcję przy

2
 
    I've got an idea that may help you. Let't suppose that user added a new 
record in grid, in that moment add a new property newRecOrderNo to the record to 
identify the record after response. When user will post data to server after 
inserting you must get a new ID and associate it to newRecOrderNo 
(like Map<Integer,Integer>). Then return json object like that : 

{ 
    success : true, 
    newIdes : { 
      1 : 23, 
      2 : 34 
    } 
} 
 

Then when you get response do set proper IDs to records: 

    userDataStore.each(function(rec){ 
     if(rec.data.newRecOrderNo){ 
      rec.data.ID = response.newIdes[rec.data.newRecOrderNo]; 
      delete rec.data.newRedOrderNo; 
     } 
    }) 
 
}) 

1

Tak, to ustawia id (a także innych dziedzinach, jeżeli serwer zwraca zmodyfikowany wartości nich), jeśli tworzyć ajax backend rekord wraca z ustaw id, przynajmniej w extjs 4.1. Powinieneś zwrócić wstawiony rekord, z ustawionym identyfikatorem, pod kluczem "root" jako słownik json, w tym przykładzie root jest "Data", tj .:

{ 
    "Data": { 
    "ID": 8932, 
    "NT_ID": 28738273, 
    ... 
    "CurrentRoleCode": "aaa", 
    }, 
    "success": true 
} 
Powiązane problemy