Передача скрытых параметров между маршрутами

Я очень новичок в Ember.js, и пытаюсь создать приложение, в котором мне нужно просматривать даты и конфиденциальность записей.

То, что я хочу сделать, мне нужно передать одно значение переменной через маршруты Ember, не показывая его на URL

appcication_routes.js.coffee

App.Router.map ->
  @resource 'user', { path: '/user/:user_id' }, ->
    @resource 'user_feed', { path: '/feed' }, ->
      @route 'posts', { path: '/:date' }

user_routes.js.coffee

App.UserFeedIndexRoute = App.Route.extend
  activate: ->
    controller = @controllerFor('user_feed.index')
    controller.set 'checkPrivate', false
  redirect: ->
    @transitionTo 'user_feed.posts', @modelFor('user'), 'today'

App.UserFeedPostsRoute = App.Route.extend
  activate: ->
    controller = @controllerFor('user_feed.posts')
  model: (params) ->
    ...

Для перехода от контроллера я использовал строку ниже

@transitionToRoute 'user_feed.posts', @get('user'), newDateString

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

Я много гуглил, но с нулевым успехом.

1 ответ

Решение

Вы можете использовать общий контроллер ( Ember Guide), который сохраняет состояние закрытой переменной.

App.ApplicationController = Em.Controller.extend({
  checkPrivate: null
});

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

App. UserFeedPostsController = Em.ArrayController.extend({
  needs: ['application']
});

App.ApplicationController = Em.Controller.extend({
  needs: ['application']
});

Если в вашем случае не требуется доступ к данным с другого контроллера, вы всегда можете получить доступ к определенному контроллеру с любого маршрута, как:

this.controllerFor('application');
Другие вопросы по тегам