我有这条路线
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,其他值未定义
答案 0 :(得分:0)
不确定是不是这样,但也许您的意思是导航到#/todos/todo/SOME_ID
而不是#/todo/SOME_ID
- 您在映射时为todo路线提供的路径(this.route('todo' {path: 'todo/:todo_id'});
) 追加到父路径/todos
),最终得到todos/todo/:todo_id
。
除此之外,您还可以执行一些调试步骤以进一步隔离问题
model
挂钩是否完全被调用?params.todo_id
您的期望是什么?修改强>
我认为你的意思是在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)向正确的服务器端点发出请求?您的服务器是否提供了正确的响应?