2015-05-27 6 views
0

Я хочу получить доступ к приложению Controller с другого маршрута (выпуска), внутри afterModel.Эмбер, обращающийся к другому контроллеру с маршрута

Основная цель состоит в том, чтобы изменить фон приложения после того, как будет определена модель обещания.

Это мой issue.js:

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    needs: ['application'], 
    model: function(params) { 
    [... some code ...] 
    }, 
    afterModel: function(model, transition) { 
    model.issue.then(function(resolvedIssue) { 

     // I'm looking to access the controller here 
     var theOtherController = this.get('controllers.application'); 

     return resolvedIssue; 
    }); 

    } 

}); 

Я попробовал несколько комбинаций, но безуспешно. Когда я пытаюсь записать материал в консоли, я получаю сообщение об ошибке try/catch.

Каков правильный способ?

ответ

0

У вас есть пара ошибок в коде. Во-первых, у вас нет области issue маршрут в model.issue.then(...), поэтому get('controller') не может работать. Во-вторых, оператор needs действителен только для контроллеров, а не для маршрутов.

Вы должны направить свое действие в свой маршрут issue и поймать его по маршруту application, используя ember bubbling.

Все действия, которые отправляются, проходят через маршруты до application. Если маршрут application не обрабатывает это действие, ошибка возникает. Посмотрите на этот код, который должен быть в вашем issue маршруту:

afterModel: function(model, transition) { 
    var _this = this; 
    model.issue.then(function(issue) { 
    _this.send('changeLayout', issue.get('image')); 
    }); 
} 

И в вашем маршруте приложения вы можете поймать, что действия и, например, выполнить некоторый метод на контроллере приложения:

toggleLayout: function(desiredImage) { 
    // time to actually change the image here 
    console.log("let's display " + desiredImage); 
} 

application маршрут:

actions: { 
    changeLayout: function(desiredImage) { 
    this.get("controller").toggleLayout(desiredImage); 
    return false; // make sure to stop bubbling up! 
    } 
} 

Это намного лучше, чем при использовании любого вида needs поскольку она полностью покрывает условность данных-вниз-вверх действий.

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