2015-05-21 49 views
2

我試圖通過回滾模型來捕獲和處理失敗的刪除請求,並讓它保留在視圖中,但我遇到了問題。我有我的控制器刪除行動如下:在失敗刪除後回滾模型不會更新視圖

model.delete(); 

model.save().then(function() { 

    alert('Deleted!'); 

}, function(err) { 

    alert('Delete failed...'); 
    model.rollback(); 

}); 

這似乎做工精細,我可以看到,該模型迅速從商店中消失,然後立刻加回,但問題是它只是不會再出現在視圖中。

之前和之後刪除/回滾該模型具有以下屬性

isLoaded:true 
isDirty: false 
isSaving: false 
isDeleted: false 
isError: false 
isNew: false 
isValid: true 

我的模板如下:

<table> 
<thead> 
    <tr> 
    <th></th> 
    <th>Name</th> 
    <th>Number</th> 
    <th>Speed Dial</th> 
    </tr> 
</thead> 
<tbody> 

    {{#each contact in model}} 

    {{phonebook-row data=contact}} 

    {{/each}} 

</tbody> 

</table> 

最後,這裏是在各自的路由模式掛鉤。

export default Ember.Route.extend({ 

    model: function() { 
    return this.store.find('phonebook', { pageSize: 200 }); 
    } 

}); 

我在灰燼1.11.1和灰燼數據1.0.0-beta.16.1

這是預期的行爲,還是我失去了一些東西?任何信息,將不勝感激!

+0

您是否嘗試過使用一個ember組件? –

+0

你的觀點是什麼樣子? – GJK

+0

@GJK沒有看法,但將我的模板添加到原始問題 – joshfarrant

回答

1

這是我最好的猜測基於什麼我知道灰燼數據:

您的這條路線模型是一組記錄。具體來說,它可能是RecordArray的一些子類。 RecordArray可能會爲您處理一些事情,例如刪除數組中的記錄。 (Ember Data已知可以在別處執行此操作,例如FilteredRecordArray。)我的猜測是,Ember Data在刪除陣列時非常聰明,可以從陣列中刪除記錄,但當您滾動時不夠聰明以將其添加回陣列回來了。

至於如何解決它,我不是100%確定。 :/撥打model.rollback()後,可能會嘗試撥打model.reload()。這不是解決方法,而是解決方法,但它可以讓你暫時通過。同時,我將嘗試重現此問題,並查看它是否爲Ember Data中的錯誤。

+0

聽起來可能是這樣,但我無法弄清楚如何實際更新視圖。我在回滾之後嘗試了一個.reload(),但不幸的是似乎沒有任何效果。 – joshfarrant

+0

老實說,這是我在2014年離開餘燼數據的3個原因之一(試圖將客戶端數據保持在我可以推理的狀態中的常量問題)。如果你沒有大量投入數據,你可以看看另外一些支持髒跟蹤/回滾的方案(這些方案的痛苦/生產缺陷少得多)。下面是我寫的一篇文章,我的團隊通過https://github.com/toranb/ember-cli-simple-store獲得了巨大的生產成功 –

相關問題