我有以下代码。 (我只需要复制路由器,因为此应用程序目前有500行) 我需要的是从州'房间'切换到'guests.new'。
当我到达房间状态时,它会加载一个模板,我称之为动作'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>
我也尝试过使用ember-latest,因为我已经在各种线程中读到了预版本给出了一些路由问题。 事实证明,使用ember-latest,我无法定义计算属性。至少这是加载页面时控制台上弹出的内容。
有任何线索吗?
非常感谢!
答案 0 :(得分:1)
问题在于,Ember无法访问guests
路线中的rooms
路线。所以你需要做的是将动作功能向下移动到树下。我在下面调整了你的代码:
调整代码:
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();
}
})
})
})
});