【问题标题】:Passing hidden parameters between routes在路由之间传递隐藏参数
【发布时间】:2014-06-30 17:09:30
【问题描述】:

我对 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 值更改时再次调用路由。

我用谷歌搜索了很多,但成功率为零。

【问题讨论】:

    标签: ember.js coffeescript ember-router ember-rails


    【解决方案1】:

    您可以使用共享控制器 (Ember Guide) 来保存私有变量的状态。

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

    然后,如果您想在特定控制器中访问此值,您可以使用 needs 导入它。

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

    如果您的案例不需要从其他控制器访问数据,您始终可以从任何路由访问特定控制器:

    this.controllerFor('application');
    

    【讨论】:

    • 非常感谢ppcno。这帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多