2012-03-21 3 views
0

Какова принятая стратегия обеспечения того, чтобы модели, загруженные с сервера, а затем впоследствии измененные в пользовательском интерфейсе (то есть ExtJS) и отправляемые обратно на сервер, были сохранены правильно?ExtJS3 - предотвращение перезаписи неправильно загруженных моделей

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

например. на сервере модель имеет следующие свойства:

color: blue 
size: 10 
weight: 20 

Пользователь загружает модель, и в процессе загрузки, когда пользователь изменяет

color: red 

и сохраняет. В результате модель теряет свои вес и размеры на сервере. Обратите внимание, что это радикальное упрощение нашего сценария. Модели намного сложнее и объем данных намного больше.

Стратегии я могу думать:

  1. Убедитесь, все загружается, прежде чем позволить пользователям сохранять (безвкусный, я думаю).
  2. Следите за изменениями в модели, сохраняйте изменения. Это не требует полной загрузки модели, так как только те вещи, которые пользователь активно редактирует, сохраняются обратно на сервер (не знаю, поддерживается ли это в ExtJS из коробки).

Может кто-нибудь указать мне в правильном направлении? Мог ли Ext.data.Record.getChanges/isModified использоваться для реализации второго подхода? Как удаляются обработчики ExtJS?

+0

Как только я прочитал, что прокси-модель модели предположила, что модель не была загружена, если у нее нет свойства id.У вас есть свойство id? –

+0

Я действительно не знаю, так как в этом случае я не разработчик, а клиент. Но это поможет реализовать 1, а не 2, верно? –

ответ

0

Когда вам нужно сохранить модель, которая никогда не была сохранена, вы делаете это:

model.save(); 

Этот метод автоматически вызывается метод Ext.data.proxy.Proxy.create().

Если вам необходимо обновить модель с некоторыми новыми данными или даже заменить существующие данные, вы делаете это:

model.set('property', 'value'); 

Это один, в другой стороны, автоматически вызывает метод Ext.data.proxy.Proxy.update().

Тогда вы можете работать с постоянной моделью класса со ссылкой на статус действия:

  • Ext.data.Model.EDIT
  • Ext.data.Model.REJECT
  • Ext.data.Model.COMMIT

@charris приносит хороший пример как комментарий официальные документы:

var myStore = Ext.create('Ext.data.Store', { 
    model: 'MyApp.model.MyModel', 
    listeners: { 
    update: function(store, model, operation, eventOptions) { 
     if(operation == Ext.data.Model.EDIT) { 
      // Model was edited but not saved... 
     } 
     else if(operation == Ext.data.Model.COMMIT) { 
      // Model was saved... 
     } 
    } 
    } 
}); 

Возможно, это вам поможет.

Смежные вопросы