Emberjs复杂路由

时间:2014-09-12 22:11:15

标签: ember.js routing coffeescript

在我的应用程序中,有一个客户端供会员选择瓶子和管理部分来管理成员,瓶子,储物柜等都使用相同的模型,所以我认为我的路由器应该是这样的:

App.Router.map ->
  @.route "signin" #Restuarant signs in to the application
  @.resource "member", -> 
    @.route "signin" #Members sign in to see their bottles
    @.resource "member", path: ":member_id", ->
      @.resource "bottles", ->
        @.route "select"
      @.resource "transcations", ->
        @.route "create"
        @.resource "transcation", path: ":transcation_id", ->
  @.resource "admin", ->        
    @.route "signin" #Restaurant signs in to manage
    @.resource "members", ->
      @.route "create"
      @.resource "member", path: ":member_id", ->
        @.resource "bottles", ->
          @.route "create"
          @.resource "bottle", path: ":bottle_id", ->
            @.route "edit"
        @.resource "transcations", ->
          @.resource "transcation", path: ":transcation_id", ->
    @.resource "lockers", ->
      @.route "create"
      @.resource "locker", path: ":locker_id", ->
      @.resource "lockertype", path: "types", ->
        @.resource "lockertype", path: ":locker_type_id", ->
          @.route "edit"  
        @.route "create"  

我了解admin下的资源将替换具有相同名称的成员的资源。

解决这个问题的最佳模式是什么?

我目前的解决方案是命名空间(有点?)这样的资源:

    @.resource "member", -> 
      @.route "m.signin" #Members sign in to see their bottles
      @.resource "m.member", path: ":member_id", ->
        @.resource "m.bottles", ->
          @.route "select"
        @.resource "m.transcations", ->
          @.route "create"
          @.resource "m.transcation", path: ":transcation_id", ->

有更好的方法吗?这样可怕吗?我一直在寻找EMBER.NAMESPACE,但我不明白我将如何使用它。

关于github的相关讨论:

https://github.com/emberjs/ember.js/issues/683 https://github.com/emberjs/ember.js/pull/1925

1 个答案:

答案 0 :(得分:1)

如果您声明嵌套资源,则其名称必须包含以dot结尾的父资源名称:'members.member','members.member.bottles'等。尾部路径的名称更简单('signin'insted of'member 。登入')。 您可以借助chrome extension(Ember Inspector)来观察所有应用程序的路径。

9月14日更新 我曾经使用旧版本的Ember,不知何故错过了路由系统的更新。在上一个Ember版本(1.7.0)中无需this.resource调用。这意味着您只能使用this.route方法,这更方便,更清晰:http://emberjs.jsbin.com/bukogojuzeni/1/edit?html,js,output