1

我有这条路线

this.resource('todos', { path: '/todos' }, function() {
  this.route('todo', { path: '/todo/:todo_id' });
  this.route('new', {path: '/todo/new'});
});

这是路由 todo 的控制器

App.TodoRoute = Ember.Route.extend({
  model: function(params) {
    return Todo.find(params.todo_id);
  }
});

当我直接加载/todos,然后按预期加载一个todo,但是当我尝试直接加载/todo/idOfTheTodoHere 时,没有加载任何内容。

我必须向控制器添加一些东西,直到找到所有数据才能加载模板?

我会放在这里完整的路线

App.Router.map(function() {
  this.resource('app', { path: '/' }, function () {
    this.route("about");

    this.resource('todos', { path: '/todos' }, function() {
      this.route('todo', { path: '/todo/:todo_id' });
      this.route('new', {path: '/todo/new'});
    });
  });
});

//This works and finds All todos
App.TodosRoute = Ember.Route.extend({
  model: function () {
    return App.Todo.find();
  }
});

App.TodosNewRoute = Ember.Route.extend({
  model: function () {
    return App.Todo.create;
  }
});

App.TodosTodoRoute = Ember.Route.extend({
  model: function(params) {
    console.log(App.Todo.find();
    return Todo.find(params.todo_id);
  }
});

现在,当我转到 /#/routes 时,所有 todo 都正确显示,我可以创建一个新的,但是当我单击单个 todo 以显示它并且路由更改为 /#/todos/todo/ID 时,如果我重新加载浏览器模板什么也没显示,看起来像直接在路由上加载模型没有返回任何内容。找到的唯一参数是 id,其他属性为空。

所以在模板 todo 如果我有这个属性

{{id}} - {{title}}

仅显示 id,如果我检查控制台

 model: function(params) {
    console.log(App.Todo.find();

返回模型id,其他值未定义

4

1 回答 1

0

不确定是否是这样,但也许您的意思是导航到#/todos/todo/SOME_ID而不是#/todo/SOME_ID- 您在映射它时为 todo 路由提供的路径 ( this.route('todo' {path: 'todo/:todo_id'});) 被附加到父路径 ( /todos) 所以你最终得到todos/todo/:todo_id.

除此之外,您可以执行一些调试步骤来进一步隔离问题

  1. 你的路线的model钩子有没有被调用?
  2. params.todo_id你所期望的吗?
  3. 浏览器是否发出正确的 ajax 请求?(到正确的端点)
  4. 您的服务器是否正确响应该 ajax 请求?

编辑

我认为您的意思是在 TodosTodoRoute 的模型挂钩中调用 App.Todo.find:

App.TodosTodoRoute = Ember.Route.extend({
    model: function(params) {
      console.log(App.Todo.find();
      return Todo.find(params.todo_id);   // --- should be App.Todo.Find
  }
});

您发布的代码中也存在一些语法错误——您能否发布一个重复问题的 JSBin 或 JSFiddle 示例?

您是否确认 App.Todo.find(some_id) 向正确的服务器端点发出请求?您的服务器是否提供了正确的响应?

于 2013-07-27T15:50:50.737 回答