在我的willTransition
掛鉤中,我使用isDirty
來確定模式是否應向用戶顯示一條警告,告知用戶如果他們離開,他們將丟失未保存的更改。問題是,在調整任何字段之前,Ember中的新記錄被認爲是髒的。我需要一種方法來覆蓋這種行爲。我試過以下沒有成功:如何將新記錄的髒污標記設置爲假
首先,我試着創建自己的標誌,觀察模型更改並將isNasty
標誌設置爲true。我認爲這可能會起作用,因爲我忽略了.on('init')
,但不幸的是這是立即設置爲新記錄。
// app/controllers/foo.js
...
isNasty: false,
modelIsEdited: function() {
this.set('isNasty', true);
}.observes('model')
接下來,我想到了isDirty
標誌的組合和isNew
會做的伎倆,這並在技術上部分工作。但問題出現了,如果你再輸入字段插入新記錄,它永遠不會與模態提示:
// app/routes/foo.js
...
willTransition: function() {
if (this.controller.get('isDirty') && !this.controller.get('isNew') {
...
}
}
同樣的問題提出了自己與dirtyType
屬性(檢查它的created
)。
最後,我嘗試在創建模型後手動將isDirty
標誌設置爲false,但是因爲它是隻讀屬性,所以這也不起作用。
// app/routes/foo.js
...
setupController: function(controller, model) {
this._super(controller, model.demo);
controller.set('isDirty', false);
// This throws an error as isDirty is a read-only property
}
所以你不希望用戶被警告,如果他們放棄他們正在創建的新模型? – Jakeii 2014-10-11 07:24:50