2013-06-17 2 views
1

У меня есть следующие два пути для редактирования объекта (узла) в моем приложении:доступ История просмотра в уголек

  1. Список узлов -> нажмите изменить значок
  2. Список узлов -> выберите узел - > нажмите кнопку редактирования

У меня есть возможность отменить редактирование. Когда я отменяю, я хочу, чтобы маршрутизатор (контроллер?) Вернулся в нужное место. То есть, если я пришел из списка узлов, я хочу, чтобы отмена вернулась к «списку узлов» (#nodes). Если я пришел из представления узла, я хочу, чтобы отмена вернулась к представлению узла (#nodes/show/node-id). В настоящее время это реализация в моем NodesEditController:

SettingsApp.NodesEditController = Ember.ObjectController.extend({ 
    needs: ['nodesIndex'], 
    selectedNode: null, 
    selectedNodeType: null, 
    nodes: [], 
    ... 
    cancel: function() { 
     this.stopEditing(); 
     this.transitionToRoute('nodes.show', this.get('content')); 
    }, 

    ... 
}); 

Как вы можете видеть, маршрут для cancel действия является фиксированным (nodes.show). Но в первом случае я хотел бы сделать this.transitionToRoute('nodes.index');. Так что мой cancel метод должен быть чем-то вроде этого:

cancel: function() { 
    this.stopEditing(); 
    if (some_test) { this.transitionToRoute('nodes.show', this.get('content')); 
    } else { this.transitionToRoute('nodes.index'); } 
} 

Как реализовать some_test? Что я могу проверить, чтобы узнать, как я добрался до текущего маршрута?

ответ

1

Reopen Ember.Route хранить currentPath когда маршрут вышли:

Ember.Route.reopen({ 
    deactivate: function() { 
    var applicationController = this.controllerFor('application'); 
    App.previousPath = applicationController.get('currentPath'); 
    } 
}); 

Затем в методе отмены:

goBack: function() { 
    if (SettingsApp.previousPath == 'nodes.show') { 
     this.transitionToRoute(SettingsApp.previousPath, this.get('content')); 
    } else { 
     this.transitionToRoute(SettingsApp.previousPath); 
    } 
}, 

cancel: function() { 
    this.stopEditing(); 
    this.goBack(); 
}, 

Примечание: Вы можете предоставить некоторые запасной вариант в случае, если приложение загружен в маршрут nodes.edit.

+0

Не должно быть 'Ember.Route.reopen'? Могу ли я это сделать в любом приложении? Извините, новичок здесь. – dangonfast

+0

Спасибо, что сработало. Это было действительно «Ember.Route.reopen». Я немного изменил ваш ответ, чтобы сделать его более полным. – dangonfast

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