2013-10-10 4 views
0

Я использую Ember.js и Ember-Data. Пользователи могут создавать и обновлять ресурсы, например, модель Organization. По большей части система работает должным образом. Исключением является то, что пользователь частично заполняет форму, а затем оставляет страницу без нажатия кнопки «Отправить». Частично созданный ресурс будет сохраняться на стороне клиента. (Он никогда не отправляется на сервер и так никогда не существует в базе данных Если пользователь перезагружает страницу, эти частично созданные ресурсы исчезают.).Сохранять данные только после отправки в Ember.js

Мои маршруты довольно стандартны:

Whistlr.OrganizationsNewRoute = Ember.Route.extend 
    model: -> 
    @store.createRecord('organization') 
    setupController: (controller, model) -> 
    controller.set('content', model) 

Whistlr.OrganizationEditRoute = Ember.Route.extend 
    model: (params) -> 
    @store.find('organization', params.organization_id) 
    setupController: (controller, model) -> 
    controller.set('content', @modelFor('organization')) 

Возможно поведение я «Как описано, также стандартно? Если да, есть ли способ предотвратить это?

ответ

2

Вы можете использовать метод rollback от DS.Model, чтобы восстановить локальные изменения.

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

прочертовский вам нужно будет использовать ту же логику в OrganizationsNewRouteOrganizationEditRoute и, таким образом Вы можете извлечь до Mixin:

Whistlr.CleanupRecordDataMixin = Ember.Mixin.create({ 
    deactivate: function() { 
     this.get('controller.content').rollback(); 
    } 
}); 

Whistlr.OrganizationsNewRoute = Ember.Route.extend(Whistlr.CleanupRecordDataMixin, { 
    // other methods 
}); 

Whistlr.OrganizationEditRoute = Ember.Route.extend(Whistlr.CleanupRecordDataMixin, { 
    // other methods 
}); 
+0

Красивая. Деактивировать и откат выглядят как правильный путь, но приложение зависает, когда я пытаюсь выйти из формы. Как ни странно, никаких сообщений об ошибках не возникает, даже когда я намеренно помещаю код ошибки с 'deactivate'. Если я помещаю 'alert (« Pre »)' before' this.currentModel.rollback(); ', появляется предупреждение. Если я поместил его позже, я не получу предупреждения - и никаких сообщений об ошибке. Это отлаживает боль. С первого взгляда вы можете увидеть что-то неправильное 'this.currentModel.rollback();'. Я использую Ember-Data 1.0.0beta2, который мог бы изменить синтаксис где-то. Я уточню, если найду ответ. – nullnullnull

+0

Отладка в консоли Chrome вызвала у меня эту ошибку: 'TypeError: Object [object Object] не имеет метода 'rollback''. – nullnullnull

+1

Странно, что возвращается из 'this.currentModel.constructor'? Попытайтесь использовать 'this.get ('controller.content'). Rollback()' как обходной путь, возможно, работать ... –

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