2010-09-14 6 views
9

Я пытаюсь узнать, как использовать сетки EXTJS для некоторых простых операций CRUD над таблицей в приложении администратора.EXTJS + Обновление магазина с идентификатором базы данных после сохранения сетки

У меня есть простая сетка, что позволяет кому-либо редактировать пользователь, магазин определяются как:

 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 
      }) 
     }); 

Это связан с сеткой, и я могу загрузить и сохранить пользователь без проблем. Кнопка сохранения выглядит следующим образом:

var saveButton = new Ext.Button({ 
      text: 'Save', 
      disabled: true, 
      handler: function() { 
       userDataStore.save();      
       pageState.ClearDirty(); 
       saveButton.disable(); 
      } 
     }); 

Однако при создании нового пользователя, JSON POST для пользователя размещается в том же REST службы конечной точки, как «Update», с той лишь разницей, что нет ID (как указано в хранилище при загрузке с сервера).

Это работает, и я могу создать пользователей.

Служба сохранения REST возвращает созданную строку с новым идентификатором базы данных, и я был в предположении, что EXTJS автоматически привяжет новый сгенерированный идентификатор базы данных к строке. Это позволяет пользователю дополнительно редактировать эту строку и вызывать обновление вместо вставки.

Вместо этого строка продолжает иметь пустой идентификатор пользователя, поэтому дополнительное сохранение создает другого нового пользователя.

Так как:

  • ExtJS предполагается разрешить генерироваться ряд идентификаторов автоматически, и я просто делаю что-то неправильно.
  • Я должен вручную перезагрузить сетку после каждого сохранения с помощью дополнительного вызова REST.

Я смотрел документацию и форумы EXTJS, но я не знаю, как правильно подойти.

Может кто-нибудь уточнить?

EDIT: Я попытался вернуть Success = True в JSON, чтобы соответствовать SuccessProperty, однако это все еще не работает.

EDIT # 2: Пока что единственное, что я нашел, что работает, это «userDataStore.reload()» после сохранения, однако, поскольку я возвращал содержимое хранилища после сохранения, я надеялся, что EXTJS будет понимать это и обновлять значения строк.

ответ

-1

Вам необходимо перезагрузить магазин новыми параметрами в обработчике savebtn например store.reload();

, конечно, вы можете добавить больше Params загрузить Действие

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

Да, он устанавливает идентификатор (а также другие поля, если сервер возвращает модифицированные значения из них), если создать АЯКС бэкенд возвращает запись с set id, по крайней мере, в extjs 4.1. Вы должны вернуть вставленную запись с установленным идентификатором под ключом «root» в качестве словаря json, в этом примере корень - «Данные», то есть:

{ 
    "Data": { 
    "ID": 8932, 
    "NT_ID": 28738273, 
    ... 
    "CurrentRoleCode": "aaa", 
    }, 
    "success": true 
} 
Смежные вопросы