我正在开发Ember.js和RoR(Rails 4.0.3
和Ruby 2.0
)中的应用程序。
Ember版本:
DEBUG: Ember : 1.12.1 ember.js?body=1:4875
DEBUG: Ember Data : 1.0.0-beta.19.2 ember.js?body=1:4875
DEBUG: jQuery : 1.11.1 ember.js?body=1:4875
handlebars v3.0.3
我使用了本教程
http://www.thesoftwaresimpleton.com/blog/2015/04/18/arraycomputed-refactor/
实现一些自定义组件,但没有必要显示它们,它们对主要问题无法解决。
当我想从ListsRoute
转到TaskEditRoute
时,它会引发错误
Error while processing route: task.edit Assertion Failed:
You may not pass `undefined` as id to the store's find method
Error: Assertion Failed: You may not pass `undefined` as id to the store's find method
-router.js
EmTasks.Router.map(function(){
this.route("lists", {
path: '/'
});
this.route('profile', {
path: '/profile'
});
this.resource("task", {path: "/task/:task_id"}, function () {
this.route('edit', {path: "edit"});
});
});
-lists_route.js
EmTasks.ListsRoute = Ember.Route.extend({
model: function() {
return this.store.find('list');
},
actions: {
addList: function(param) {
this.store.createRecord('list', {
name: $("#list_name").val()
}).save();
$("#list_name").val('');
}
}
});
-task_edit_route.js
EmTasks.TaskEditRoute = Ember.Route.extend({
model: function (params) {
var url = this.get('router.url');
var id = url.split("/")[2]
console.log("TaskEditRoute params:", params);
return this.store.find("task", id);
}
});
-lists.handlebars
<div class="row">
{{#each model as |list|}}
<div class="col-md-4">
{{x-list list=list}} <!-- custom component - working -->
{{x-add-task list=list}} <!-- custom component - working -->
{{#each list.tasks as |task|}}
{{#link-to 'task.edit' task}}
{{task.name}}
{{/link-to}}
<a href='#/task/{{task.id}}/edit'>
{{task.name}}
</a>
{{x-task task=task}} <!-- custom component - working -->
{{/each}}
</div>
{{/each}}
</div>
所以当我点击link-to
生成的链接时,
{{#link-to 'task.edit' task}}
{{task.name}}
{{/link-to}}
它不会将我重定向到新的URL,当我使用console.log检查params时,我可以看到它们是空的。
TaskEditRoute: params Object {}
此外我收到此错误:
Error while processing route: task.edit Assertion Failed: You may not pass `undefined` as id to the store's find method Error: Assertion Failed: You may not pass `undefined` as id to the store's find method
当我点击自定义的手写链接
时 <a href='#/task/{{task.id}}/edit'>
{{task.name}}
</a>
我被重定向,但仍然是TaskEditRoute中的params
为空。
但我可以获取当前网址(window.location.href
或ember way this.get('router.url')
),解析它并获取ID。
所以它有效...但它很棘手,很丑。
为什么......标准的做事方式,here无效?
答案 0 :(得分:3)
您在id
路线上定义了动态细分task
,而不是task.edit
路线。
EmTasks.TaskRoute = Ember.Route.extend({
model: function (params) {
console.log("TaskEditRoute params:", params);
return this.store.find("task", params.id);
}
});
从Ember 1.4或其他东西开始,子路由将自动使用其父模型,除非子路由选择在其自己的模型钩子中使用不同的东西。因此,您应该拥有父母模型而无需在TaskEditRoute