Ember.js URL如何表示每个可能的路由器状态?

时间:2013-11-22 11:30:48

标签: javascript ember.js

在emberjs.com上的路由文档中,它说明了

  

用户当前是否已登录?他们是管理员用户吗?他们在看什么帖子?设置屏幕是否打开?他们正在编辑当前的帖子吗?   在Ember.js中,应用程序中的每个可能的状态由URL表示。

我似乎无法理解:如何将上述所有可能的状态用URL表示?

说明:

据我所知,Ember路由器是一个严格的分层树结构。对于简单的URL,这对我来说非常有意义,例如

user/:user_id/posts/:post_id/comments

是单个帖子评论的定位器。

现在,用户的登录状态会在哪里?不会为同一资源创建多个URL,或者这不重要吗?

如果您的设置屏幕是可以从网站上的任何位置访问的模式,那么该如何反映在网址中?

我不是要求一个解决方案,但只想获得一些关于这在指南中实际意味着什么或者最佳实践的意见。

1 个答案:

答案 0 :(得分:1)

很好的问题康拉德。

我将从我在Ember完成的多个项目中获得一些经验。

  1. 我很少将用户添加到路线中,除了当前登录的用户之外,您很可能不会发送任何内容(当然,除非您正在构建管理资源)。因此,在url中定义用户标识可能不正确,因为它没有定义当前页面,它定义了正在查看当前页面的用户。

  2. 登录状态与其他资源路由无关。它将存在于root用户,登录后您将重定向到授权路由。如果有人直接导航到授权路线,有一些好的模式可以暂停转换,导航到登录路线,然后在有效登录时重定向到授权路线。

  3. 通常,您有一条资源的多条路线。

    App.Router.map(function() {
       this.resource('login');
       this.resource('post', { path: '/post/:post_id' }, function() {
         this.route('edit');
         this.route('someViewWithTheSameResource');
         this.route('someViewWithTheSameResource2');
         this.resource('comments', function() {
            this.route('new');
            this.route('update');
         });
       });
     });
    
  4. 爷爸问题是模态。最初这只是一个不在URL中处理它,没有很好的方法来处理这个,而不必在不同的设置下添加一百万个路由。随着即将更改的查询参数,您可以在根级别修改设置,而不必破坏整个资源树。这仍处于测试阶段,因此可能无法按预期工作,但目标是能够处理这样的用例。

  5. http://emberjs.com/guides/routing/query-params/