ember 2.0: использовать один и тот же контроллер на нескольких маршрутах

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

Я хочу указать, что несколько маршрутов используют один и тот же контроллер (и модель). Я вижу это в документации к более старой версии Ember можно указать контроллер с помощью свойства «controllerName» в определении маршрутов, но эта часть документации была удалена для последней версии Ember. И когда я проверяю свойство controllerName, оно не работает.


person Vilhelm H.    schedule 14.10.2015    source источник
comment
Возможно, вы могли бы использовать наследование и/или примеси, чтобы использовать одну и ту же логику на нескольких контроллерах.   -  person Pascal Boutin    schedule 14.10.2015
comment
Можете ли вы поделиться более подробной информацией о логике, которую вы пытаетесь разделить между маршрутами?   -  person Chris Peters    schedule 14.10.2015
comment
Я решил свой вопрос. Смотрите ответ ниже.   -  person Vilhelm H.    schedule 14.10.2015


Ответы (2)


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

import FooIndexController from 'ember-app/foo/index/controller';
export default FooIndexController.extend({});

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

import Ember from 'ember';
import BaseController from 'ember-app/mixins/base-controller';
export default Ember.Controller.extend(BaseController, {
    // Code specific to _this_ controller lives here
});
person Collin James    schedule 14.10.2015
comment
Спасибо. В этом есть смысл. Не то, что я искал прямо сейчас, но эти приемы также могут оказаться полезными. - person Vilhelm H.; 14.10.2015

Я понял. Оказывается, controllerName все-таки работает.

Я только что сделал это:

// route/home/books/book/details
import Ember from 'ember';
export default Ember.Route.extend({
    controllerName: "home/books/book/index",
});

Затем book и book/details делят контроллер. Они уже используют общую модель, поскольку маршрут details является подмаршрутом маршрута book. Так что это работает хорошо.

person Vilhelm H.    schedule 14.10.2015