检测Ember Route的模型/ URL更改

时间:2013-05-22 07:01:49

标签: ember.js ember-data

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

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

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

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

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

1 个答案:

答案 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中,这似乎过于宽泛。