Ответ 1
Я написал сообщение в блоге, в котором описывается метод для этого: http://codebrief.com/2012/02/anatomy-of-a-complex-ember-js-app-part-i-states-and-routes/
Интересно о правильной процедуре или, по крайней мере, общей процедуре использования sproutcore-routing.
В прочитанном мне там показан этот основной пример маршрутизации:
SC.routes.add(':controller/:action/:id', MyApp, MyApp.route);
Я предполагаю, что в большинстве случаев MyApp.route вызывает вызванное действие на поставляемом контроллере. Мой вопрос больше связан с этим шагом, как вы обрабатываете материал установки/разрыва для приложения, где у вас много первичных просмотров.
Являются ли люди экземплярами новых контроллеров, когда контроллер изменяется, чтобы всегда начинать с чистого листа данных и представлений? Или более распространено/целесообразно создавать экземпляры всех контроллеров и т.д. При загрузке и просто использовать маршрутизацию для отображения/скрытия первичных представлений?
Я полагаю, что тот же вопрос возникает, когда происходит переключение между действиями внутри контроллера. Правильно ли делать некоторые разрывы, особенно на привязках/слушателях, а затем восстанавливать их, если действие вызвано?
Мой вопрос может быть немного нечетким, но я в основном задаюсь вопросом, как люди обрабатывают множество первичных просмотров и занимаются очисткой, поэтому материал не становится устаревшим или не жует много ресурсов.
Я написал сообщение в блоге, в котором описывается метод для этого: http://codebrief.com/2012/02/anatomy-of-a-complex-ember-js-app-part-i-states-and-routes/
В большинстве приложений и примеров Ember и Sproutcore, которые я видел, контроллеры создаются при инициализации приложения. Маршруты приводят в состояние изменения состояния в диаграммах состояния, где контроллеры обновляются, а представления создаются/уничтожаются по мере необходимости.
У меня есть следующая настройка.
в моем Ember.Application.create() У меня есть следующий код:
MyApp.routes = Em.Object.create({
currentRoute: null,
gotoRoute: function(routeParams) {
console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id);
if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) {
//find item with ID and load in controller
MyApp.MyController.findItemWithId(routeParams.id);
//Navigate to the correct state
MyApp.stateManager.goToState('stateName');
}
}
})
SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute');
Затем, когда я нажимаю на вещи, которые должны вызывать изменение URL-адреса, я делаю:
SC.routes.set("location", "show/item/ID-123-123");
Теперь ваше приложение должно прослушивать изменения в URL-адресе и вызывать правильное действие на основе URL-части.
Возможно, вы можете переместить MyApp.MyController.findItemWithId(routeParams.id); к функции enter() в файле состояния (если вы их используете), но вам нужно сохранить этот идентификатор где-то на каком-то контроллере.