从 Ember 1.0-pre2 转换到最新的 master 时我遇到了问题(43354a98 https://github.com/emberjs/ember.js/commit/43354a98a5e441095132b1407f3e1f4809326802)和新路由器,即——
如果我有一条仅加载一堆记录的名称和 ID 的路线,并尝试将每条记录链接到另一条应显示完整模型的路线,那么当我到达新路线时,永远不会加载新模型,名称和 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.Object(不使用 ember-data)。仅在本示例中,鸟类列表被硬编码到控制器中,以简化问题;在我的实际应用程序中,该列表来自远程 API。
我看到的行为是,如果您从 /birds 开始并单击其中一个链接,路由器将转换为“bird”并且您到达 /#/birds/b.5,但 App.Bird.find() 是从未调用过,页面上唯一的数据是“name”和“id”。但是,如果您随后重新加载页面,它会调用 App.Bird.find() 并正确构建并显示模型。
是否有某种方法可以强制从 URL 中的 ID 进行反序列化,或者仅将 ID 传递给 linkTo 而不是它假定完整的对象?我有一个类似的实现,可以在旧路由器上正常工作。