所以我设置了一个路由器和一些路由,这大部分都有效。当我加载#/ contacts / 123(或其他)时,ContactIndexRoute返回一个空的params对象。我相信这相对简单,但我无法弄清楚原因。有人能指出我正确的方向吗?感谢。
CallMonitor.Router.map(function(){
this.resource('contacts', function(){
this.resource('contact', {path: '/:contact_id'}, function(){
})
});
});
CallMonitor.ContactsRoute = Ember.Route.extend({
model: function(){
return this.store.find('contact');
},
setupController: function(controller, contacts) {
var socket = CallMonitor.Socket;
controller.set('socket', socket);
controller.set('contact', contacts);
},
renderTemplate: function(){
this._super(this, arguments);
this.render('contacts', {
into: 'application',
outlet: 'contacts',
controller: 'contacts'
});
}
});
CallMonitor.ContactIndexRoute = Ember.Route.extend({
model: function(params){
return this.store.find('contact', params.contact_id);
},
renderTemplate: function(){
this._super(this, arguments);
this.render('contact', {
outlet: 'points',
into: 'contacts',
controller: 'contactsIndex'
})
},
setupController: function(controller, contact) {
controller.set('contact', contact);
}
});
CallMonitor.ContactsController = Ember.ArrayController.extend({
actions: {
getPoints: function(data){
this.transitionToRoute('contact', data.id);
console.log('the data is' + data );
}
},
socketDidChange: function(){
var socket = this.get('socket'),
self = this;
if(socket)
{
socket.on('call', function (data) {
if(data.contactPointId){
}
else if (data.contactId)
{
var contactToUpdate = self.contact.filter(function(item) {
return item.id == data.contactId;
});
if(contactToUpdate.length)
{
contactToUpdate[0].reload();
}
else
{
// reload all the contacts
var contactPromise = self.contact.store.find('contact');
contactPromise.then(function(data){
self.set('contact', data);
}, undefined);
}
}
});
}
}.observes('socket')
});
答案 0 :(得分:2)
Params只传递给定义slug的路径。这意味着如果您在资源上定义一个slug它只存在于资源上,而不是它的路由。如果它是在资源下的路线上定义的,那么它只存在于该路线上。
CallMonitor.ContactRoute = Ember.Route.extend({
model: function(params){
return this.store.find('contact', params.contact_id);
},
renderTemplate: function(){
this._super(this, arguments);
this.render('contact', {
outlet: 'points',
into: 'contacts',
controller: 'contactsIndex'
})
},
setupController: function(controller, contact) {
controller.set('contact', contact);
}
});