由于date
是您的 URL 的一部分,您应该只使用transitionTo
or transitionToRoute
。您可能设置了一个路由,允许您匹配看起来像/pictures/2013-10-09
. 事情变得有点古怪,因为2013-10-09
它并不是一个真正的对象 ID。通常使用transitionToRoute
Ember 时,您会传递一个代表您要过渡到的内容的实时模型。model
如果直接命中路由(没有link-to
or transitionTo
),这将是 Ember 通过执行钩子查找的相同对象。由于日期实际上是一个查询参数而不是一个 id,因此您可以使用该setupController
方法来解决这个问题。
因此,您的路线可能看起来像这样(这是简化的,当然,您需要使用适当的 AJAX 调用):
App.PicturesRoute = Ember.Route.extend({
model : function(params){
console.log('calling model for PicturesRoute');
return { date : params.date }; // return a fake model
},
setupController : function(controller, model){
// Make sure not to call super since we don't want to set
// a single object instead of an array
// this._super(controller,model); <-- do not use!
console.log('calling setupController for PicturesRoute');
// Instead set the `date` property directly
controller.set('date',model.date);
// Then find/build an array and set it as the model
var pictures = [
{name : "Pic 1 - " + model.date},
{name : "Pic 2 - " + model.date}
];
controller.set('model',pictures);
console.log(model);
}
});
然后在应用程序中,当您检测到日期选择器的更改时,您会调用如下内容:
var dateFromPicker = ... // however you get a hold of the date string from the picker
var fakeModel = { date : dateFromPicker };
this.transitionTo('pictures',fakeModel);
这是一个 JSBin,显示了这个想法的一个非常简化的版本:http: //jsbin.com/ucanam/1396/edit
我希望这是有道理的。