Ember直接路线不加载内容

时间:2013-07-27 08:28:01

标签: javascript ember.js ember-data

我有这条路线

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 / todo / idOfTheTodoHere时,nothign被加载。

我必须向控制器添加一些东西,等待所有数据都被加载模板?

我将把这条完整的路线放在

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时,所有待办事项都正确显示,我可以创建一个新的,但当我点击一个待办事项进行显示时,路线变为/#/ todos / todo / ID ,如果我重新启动浏览器模板显示什么,看起来像直接加载路线上的模型没有返回任何东西。找到的唯一参数是id,其他属性为null。

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

{{id}} - {{title}}

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

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

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

1 个答案:

答案 0 :(得分: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请求?
  5. 修改

    我认为你的意思是在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)向正确的服务器端点发出请求?您的服务器是否提供了正确的响应?