ExtJS4 json data.store и Rails

#ruby-on-rails #json #rest #extjs #extjs4

#ruby-on-rails #json #остальное #extjs #extjs4

Вопрос:

Я пытаюсь создать простое CRUD-приложение, используя ExtJS4 и Ruby на Rails. Я пытаюсь реализовать хранилище данных resftul с помощью JSON.

У меня проблема с обновлением записи. Запрос отправляется на сторону сервера, и база данных обновляется, но в хранилище данных у меня все еще есть запись, помеченная как «грязная». И когда я пытаюсь обновить другую запись, мне отправляются два запроса (один для предыдущей записи, а другой для следующей записи).

Также у меня возникли проблемы с созданием новой записи. На стороне сервера создается запись, но в моем хранилище данных она по-прежнему помечена как несохраненная (грязная), поэтому во время следующего действия по обновлению / созданию эта запись снова отправляется на сервер, и в результате у меня дублируются записи в моей базе данных.

Вопрос в том, как создать действительное хранилище данных и соответствующую модель для работы с restful json из Rails?

Исходники моего приложения вы можете найти в моей учетной записи на github:https://github.com/lucassus/extjs4-account-manager

хранилище: https://github.com/lucassus/extjs4-account-manager/blob/master/public/javascripts/app/store/Users.js и модель: https://github.com/lucassus/extjs4-account-manager/blob/master/public/javascripts/app/model/User.js

Ответ №1:

Причина этого в том, что ExtJS JsonReader ожидает, что корень ‘users’ будет массивом. Это означает, что когда он просто возвращает один пользовательский объект из ваших действий создания и обновления, он не может его правильно проанализировать, поэтому некорректно обновляет модели, чтобы отметить полученные изменения и, следовательно, удалить грязный флаг.

Чтобы это сработало, вы можете изменить формат строк в ваших действиях rails в соответствии с этим:

 format.json { render :json => { :success => true, :users => [@user] } }
  

(Обратите внимание на квадратные скобки, обозначающие однопользовательский объект)

Затем это приведет к правильному обновлению грязных флагов.