2015-05-13 3 views
0

Я хочу удалить все данные из магазина, когда пользователь перейдет по другому маршруту.EmberJS чистый магазин при переходе по другому маршруту

Я хочу, чтобы это было ясно, когда переход выполняется по любому маршруту, но не является суб-маршрутом (у меня есть вложенные маршруты).

Итак, в случае willTransition Мне нужно как-то проверить, является ли переход маршрутом маршрута родительского маршрута. В этом случае, я хочу сохранить все данные из хранилища, в противном случае я должен позвонить this.store.unloadAll('my-object');

Благодаря

ответ

1

Ну вы можете получить имя текущего маршрута как

this.controllerFor('application').get('currentRouteName'); 

Это возвращение что-то вроде photos.photo , Поэтому просто посмотрите, есть ли в строке ., и вы будете знать его подпункт. Вы также можете проверить родителя, если вам это нужно.

+0

Хорошо, это частично работает. Я хочу очистить данные хранилища, даже если я оставлю подпункт этого родительского маршрута, где я применяю событие isTransition, но willTransition от родителя не будет вызван .. Мне нужно обработать это, поставив willTransition на каждом подпункте ? –

+1

Ну, вы, вероятно, можете написать миксин или базовый маршрут и сделать маршруты ура мимикой или простираться от базового маршрута. – blessenm

1

Вы уже приняли ответ, но я не думаю, что это правильное решение (кажется довольно взломанным, и у вас уже проблемы с ним). То, что вы на самом деле хотите сделать, это использовать крючок deactivate вашего маршрута. См. here. Целью этого крючка является выполнение кода при изменении маршрута. Когда подпрограммы меняются, родительский маршрут не деактивируется.

deactivate: function(){ 
    this.store.unloadAll('my-object'); 
} 

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

Из вашего комментария есть явная проблема с асинхронным запуском. Вы можете технически сделать то же самое в крюке beforeModel всех ваших родительских ролей. Он будет иметь тот же эффект, который выглядит как недействительность кэша и реквизит. Они могут быть более Ember Data способом сделать это, но я не знаю, так как я не использую его.

+0

Я уже пробовал это решение, но если бы у меня были некоторые проблемы с этим. Несколько дней назад я опубликовал вопрос о github об этой проблеме. Пожалуйста, посмотрите здесь: https://github.com/emberjs/ember.js/issues/10996 –

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