我在从 Ember 1.0-pre2 转换到最新的 master ( 43354a98 ) 和新路由器时遇到了一个问题,即——
如果我有一条仅加载一堆记录的名称和 ID 的路线,并尝试将这些记录中的每一个链接到另一个应该显示完整模型的路线,当我到达新路线时,新模型永远不会加载, name 和 ID 是唯一可用的属性。
示例代码:
App.Router.map(function() {
this.route("index");
this.resource("birds");
this.resource("bird", {
path: "/birds/:bird_id"
});
});
App.BirdsController = Ember.ArrayController.extend({
birds: [
{
name: "Pigeon",
id: "b.15"
}, {
name: "Chicken",
id: "b.133"
}, {
name: "Turkey",
id: "b.126"
}, {
name: "Ostrich",
id: "b.4"
}, {
name: "Barn Owl",
id: "b.47"
}
]
});
App.BirdRoute = Ember.Route.extend({
model: function(params) {
return App.Bird.find(params.bird_id);
}
});
{{#each bird in birds}}
<li>{{#linkTo "bird" bird}}{{bird.name}}{{/linkTo}}</li>
{{/each}}
其中 App.Bird.find() 运行一些 XHR 以从一组远程 API(不使用 ember-data)构建 Ember.Object。为了简化问题,鸟类列表被硬编码到这个例子的控制器中;在我的真实应用程序中,列表来自远程 API。
我看到的行为是,如果您从 /birds 开始并单击其中一个链接,路由器将转换为“bird”,然后您到达 /#/birds/b.5,但 App.Bird.find() 是从来没有打电话,我在页面上唯一的数据是“姓名”和“身份证”。但是,如果您随后重新加载页面,它会调用 App.Bird.find() 并正确构建并显示模型。
是否有某种方法可以强制从 URL 中的 ID 进行反序列化,或者只是将 ID 传递给 linkTo 而不是它将假定为完整的对象?我有一个类似的实现可以在旧路由器上正常工作。