2013-05-22 26 views
0

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

目前,我在做什么是这样的:

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

这工作,当用户只需最接近的项目视图。但是,如果用户只是简单地切换到查看不同的项目(例如直接从/ project/1到/ project/2),则使用相同的路线(它只使用不同的模型),并且不调用exit

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

+0

我不想发布这个答案,因为我对js/emberjs并不是很有信心,但是在这里查看API文档:http://emberjs.com/api/classes/Ember.Route .html我想你可能需要一个观察者在你的Route模型属性中,当观察属性(你的模型)被改变时调用你的保存函数。 – Anonymous

回答

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中,该ApplicationController看起来过于宽泛。