2013-05-22 25 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看起來過於寬泛。