est*_*ner 15 ember.js ember-router
从Ember 1.0- pre2转换为最新版本(43354a98)和新路由器时遇到问题,即 -
如果我有一个路由只加载一堆记录的名称和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}}
Run Code Online (Sandbox Code Playgroud)
其中App.Bird.find()运行一些XHR来从一组远程API(不使用ember-data)构建Ember.Object.仅为此示例将鸟类列表硬编码到控制器中,以简化问题; 在我的实际应用程序中,该列表来自远程API.
我看到的行为是,如果你开始/鸟类并点击其中一个链接,路由器将转换为'bird',你到达/#/birds/b.5,但App.Bird.find()是从来没有打电话,我在页面上的唯一数据是"name"和"id".但是,如果您重新加载页面,它会调用App.Bird.find()并正确构建并显示模型.
有没有办法从URL中的ID强制反序列化,或者只是将ID传递给linkTo而不是它将假定完成的对象?我有一个类似的实现与旧路由器正常工作.
Cra*_*den 19
这似乎是导航使用时永远不会被调用的model钩子......也许这是因为使用你将一个对象传递给路线上的路线而且ember认为你不应该调用它,因为它认为id已经被反序列化为一个对象.这似乎有意义,因为重新加载页面时调用.App.BirdRoute{{#linkTo}}{{#linkTo}}birdsmodelmodel
我使用setupController钩子来调用你的App.Bird.find()方法并将结果传递给控制器.这可以通过直接URL或通过{{#linkTo}}单击来调用.如果被叫{{#linkTo}}助手链接setupController的model参数将成为bird与传递的对象{{#linkTo}}帮手.如果直接从URL调用,则model钩子返回的值将setupController作为model参数传递.
App.BirdRoute = Ember.Route.extend({
model: function(params) {
return {id: params.bird_id};
},
setupController: function(controller, model) {
var bird_model = App.BirdTest.find(model.id);
controller.set("content", bird_model);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8818 次 |
| 最近记录: |