Правильная процедура использования sproutcore-routing

Интересно о правильной процедуре или, по крайней мере, общей процедуре использования sproutcore-routing.

В прочитанном мне там показан этот основной пример маршрутизации:

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route);

Я предполагаю, что в большинстве случаев MyApp.route вызывает вызванное действие на поставляемом контроллере. Мой вопрос больше связан с этим шагом, как вы обрабатываете материал установки/разрыва для приложения, где у вас много первичных просмотров.

Являются ли люди экземплярами новых контроллеров, когда контроллер изменяется, чтобы всегда начинать с чистого листа данных и представлений? Или более распространено/целесообразно создавать экземпляры всех контроллеров и т.д. При загрузке и просто использовать маршрутизацию для отображения/скрытия первичных представлений?

Я полагаю, что тот же вопрос возникает, когда происходит переключение между действиями внутри контроллера. Правильно ли делать некоторые разрывы, особенно на привязках/слушателях, а затем восстанавливать их, если действие вызвано?

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

Ответ 2

В большинстве приложений и примеров Ember и Sproutcore, которые я видел, контроллеры создаются при инициализации приложения. Маршруты приводят в состояние изменения состояния в диаграммах состояния, где контроллеры обновляются, а представления создаются/уничтожаются по мере необходимости.

Ответ 3

У меня есть следующая настройка.

в моем 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() в файле состояния (если вы их используете), но вам нужно сохранить этот идентификатор где-то на каком-то контроллере.