我的EmberJS应用程序有ProjectRoute
(/ project /:project_id)和相应的ProjectController
。在查看特定项目时,用户可以编辑其属性,并且我希望在用户停止查看时自动保存该项目。
目前,我正在做的是这样的事情:
Application.ProjectRoute = Ember.Route.extend({
...
exit: function() {
this.get('controller').saveProject();
}
...
});
当用户只是最接近项目视图时,这是有效的。但是,如果用户只是切换到查看不同的项目(例如直接从/ project / 1到/ project / 2),则使用相同的路径(它只使用不同的模型),exit
不是调用。
我需要的是一种检测此转换的方法,并在saveProject
函数发生之前调用它。有什么想法吗?
答案 0 :(得分:0)
我通过将以下内容添加到我的控制器来“解决”它:
Application.ProjectController = Ember.ObjectController.extend({
...
saveOnChange: function() {
var previousProject = this.get('target.projectToSave');
if (previousProject && previousProject.get('isDirty')) {
Application.store.commit();
}
this.set('target.projectToSave', this.get('content'));
}.observes('content')
...
});
这似乎运作良好。请注意,我将projectToSave
属性存储在路径(target
)而不是控制器中,因为每次模型更改时控制器都会被擦除。将此存储在路径中感觉有点奇怪/骇客,但我能想到的唯一选择是将它存储在ApplicationController中,这似乎过于宽泛。