0

我的 EmberJS 应用程序有一个ProjectRoute(/project/:project_id) 和一个对应的ProjectController. 查看特定项目时,用户可以编辑其属性,并且我希望在用户停止查看时自动保存该项目。

目前,我正在做的是这样的:

Application.ProjectRoute = Ember.Route.extend({
  ...
  exit: function() {
    this.get('controller').saveProject();
  }
  ...
});

当用户只是最接近项目视图时,此方法有效。但是,如果用户只是切换到查看不同的项目(例如直接从 /project/1 到 /project/2),则使用相同的路由(它只是使用不同的模型),并且exit不会被调用。

我需要的是一种检测这种转换并saveProject在它发生之前调用函数的方法。有任何想法吗?

4

1 回答 1

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) 中而不是控制器中,因为每次模型更改时控制器都会被擦除。将它存储在路由中感觉有点奇怪/hacky,但我能想到的唯一选择是将它存储在 ApplicationController 中,这似乎过于宽泛。

于 2013-05-22T21:19:11.677 回答