在最新的Ember中,如何链接到仅包含模型的id/name的路由,而不是在链接页面中提供其所有属性?

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}}助手链接setupControllermodel参数将成为bird与传递的对象{{#linkTo}}帮手.如果直接从URL调用,则model钩子返回的值将setupController作为model参数传递.

这是一个JSFiddle示例

可访问URL的示例

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)

  • 谢谢这个答案.不过,我有一个奇怪的问题.而不是/ birds /"id"我得到/ birds/[object Object].谁能告诉我什么是错的? (2认同)