Ember.js 余烬-从一种状态切换到另一种状态';s嵌套状态

Ember.js 余烬-从一种状态切换到另一种状态';s嵌套状态,ember.js,nested,ember-old-router,Ember.js,Nested,Ember Old Router,我有以下代码。(我将复制路由器,因为应用程序目前已在500行左右) 我需要的是,从状态“房间”切换到“客人。新” 当我进入rooms状态时,它会加载一个模板,我在其中调用动作“newGuest”,以便将状态更改为“newGuest”屏幕。但我不能让它工作。 在firebug上,我遇到以下错误: g[a] is undefined 这是路由器代码。 希望你能帮助我 App.Router = Ember.Router.extend({ enableLogging:true,

我有以下代码。(我将复制路由器,因为应用程序目前已在500行左右) 我需要的是,从状态“房间”切换到“客人。新”

当我进入rooms状态时,它会加载一个模板,我在其中调用动作“newGuest”,以便将状态更改为“newGuest”屏幕。但我不能让它工作。 在firebug上,我遇到以下错误:

g[a] is undefined
这是路由器代码。 希望你能帮助我

App.Router = Ember.Router.extend({
        enableLogging:true,
        location:'hash',
        gotoRooms:Ember.Route.transitionTo('rooms.index'),
        gotoGuests:Ember.Route.transitionTo('guests.index'),
        gotoBookings:Ember.Route.transitionTo('bookings'),
        gotoHome:Ember.Route.transitionTo('root.index'),

        root:Ember.Route.extend({
            index:Ember.Route.extend({
                route:'/',
                connectOutlets:function (router) {
                    App.HomeView.appendTo('#main-content .container_12');
                },
                enter: function(){
                    console.log('Entro Home');
                },
                exit: function(){
                    App.HomeView.remove();
                }
            }),
            guests:Ember.Route.extend({
                route:'/guests',
                index:Ember.Route.extend({
                    route:'/',
                    connectOutlets:function(router) {
                        App.GuestsView.appendTo('#main-content .container_12');    
                    },
                    enter: function(){
                        console.log("Entro Guests");
                    },
                    exit: function(){
                        App.GuestsView.remove();
                    },
                }),
                new:Ember.Route.extend({
                    route:'/new/:bed',
                    deserialize: function(manager, params) {
                        console.log('New Guest \nBed:'+params['bed']+"\n Date:"+params['date']);
                        App.GuestView.appendTo('#main-content .container_12');
                    },
                    connectOutlets:function(){
                        alert("hola");
                    },
                    exit: function(){
                        App.GuestsView.newGuestView.remove();
                    }
                })
            }),
            rooms:Ember.Route.extend({
                newGuest:Ember.Route.transitionTo('guests.new'),
                route:'/rooms',
                index:Ember.Route.extend({
                    route:'/',                    
                    connectOutlets:function(router) {
                        App.RoomsView.appendTo('#main-content .container_12');    
                    },
                    enter: function(){
                        console.log("Entro Rooms");
                    },
                    exit: function(){
                        App.RoomsView.remove();
                    }
                })
            })
        })
    });
谢谢@Akash,但它仍然不起作用。 我正在使用ember-1.0.pre。 调用“newGuest”的模板如下所示:

  <script type="text/x-handlebars" data-template-name="rooms">
      {{#each room in App.Rooms}}
        <div class="grid_4">
      <div class="block-border">
        <div class="block-header">
          <h1>{{room.screen}}</h1><span></span>
        </div>
        <div class="block-content">
          <ul class="block-list">
          {{#each bed in room.camas}}
            {{#if bed.guestId}}
            <li {{action "viewGuest" on="click"}} class="occupied">{{bed.id_guest}}</li>
            {{else}}
            <li class="free" {{action "newGuest" on="click"}}>Free Bed</li>
            {{/if}}
          {{/each}}
          </ul>
        </div>
      </div>
    </div>
      {{/each}}
    </script>

{{{#App.Rooms中的每个房间}
{{room.screen}
    {{{房间里的每一张床。卡马斯} {{{#如果是bed.guestId} {{bed.id\u guest} {{else}
  • free Bed
  • {{/if} {{/每个}}
{{/每个}}
我也尝试过使用ember-latest,因为我在不同的线程中读到了预版本给出了一些路由问题。 现在发现,对于ember latest,我无法定义计算属性。至少这是加载页面时控制台上弹出的内容

有线索吗


非常感谢

问题在于,Ember无法从
房间
路线内访问
来宾
路线。所以你需要做的就是把动作函数移到树的下面。我在下面对您的代码进行了一些调整:

调整代码:

App.Router = Ember.Router.extend({
        enableLogging:true,
        location:'hash',
        gotoRooms:Ember.Route.transitionTo('rooms.index'),
        gotoGuests:Ember.Route.transitionTo('guests.index'),
        gotoBookings:Ember.Route.transitionTo('bookings'),
        gotoHome:Ember.Route.transitionTo('root.index'),

        root:Ember.Route.extend({
            newGuest:Ember.Route.transitionTo('guests.new'),
            index:Ember.Route.extend({
                route:'/',
                connectOutlets:function (router) {
                    App.HomeView.appendTo('#main-content .container_12');
                },
                enter: function(){
                    console.log('Entro Home');
                },
                exit: function(){
                    App.HomeView.remove();
                }
            }),
            guests:Ember.Route.extend({
                route:'/guests',
                index:Ember.Route.extend({
                    route:'/',
                    connectOutlets:function(router) {
                        App.GuestsView.appendTo('#main-content .container_12');    
                    },
                    enter: function(){
                        console.log("Entro Guests");
                    },
                    exit: function(){
                        App.GuestsView.remove();
                    },
                }),
                new:Ember.Route.extend({
                    route:'/new/:bed',
                    deserialize: function(manager, params) {
                        console.log('New Guest \nBed:'+params['bed']+"\n Date:"+params['date']);
                        App.GuestView.appendTo('#main-content .container_12');
                    },
                    connectOutlets:function(){
                        alert("hola");
                    },
                    exit: function(){
                        App.GuestsView.newGuestView.remove();
                    }
                })
            }),
            rooms:Ember.Route.extend({
                route:'/rooms',
                index:Ember.Route.extend({
                    route:'/',                    
                    connectOutlets:function(router) {
                        App.RoomsView.appendTo('#main-content .container_12');    
                    },
                    enter: function(){
                        console.log("Entro Rooms");
                    },
                    exit: function(){
                        App.RoomsView.remove();
                    }
                })
            })
        })
    });

有趣的是,将newGuest:Ember.Route.transitiono('guests.new')更改为newGuest:function(){console.log(“事件激发”);},这将告诉我们您的事件是否实际到达了函数。同时检查你的括号,它们似乎没有对齐。更改了它,仍然得到相同的错误。你是什么意思?他们似乎一致认为您操作的语法可能是错误的,应该是{{action newGuest this href=true}。这将在单击时自动注册。