您可以使用自定义event
从您的路线内部进行管理。从您的视图/控制器中,您将事件引发到路线,该路线负责为学生添加一些数据。
App.ApplicationRoute = Em.Route.extend({
events: {
createStudent: function(student, gradeId) {
var grade = App.Grade.find(gradeId);
var newStudent = App.Student.create({
name: student.name,
address: student.address,
grade: grade
});
newStudent.save();
// other application related stuff
}
}
});
而从控制器,您使用send
派遣一个事件与此数据的路线。
save: function() {
var gradeId = this.get('newGrade');
var student = {
name: this.get('newName'),
address: this.get('newAddress')
};
this.send('createStudent', student, gradeId);
// other view related stuff
}
然后,可以从不同的控制器/视图重新使用createStudent
事件。
那么,为每个路径创建路由/控制器并让创建Student是共享的一件事? – RyanHirsch
是的。还要注意事件泡泡,直到ApplicationController,让他们有机会在路由上定义/定制'createStudent'事件,然后他们到达顶层Route。 –