2013-04-23 31 views
2

我正在使用Ember Data的修訂版12。在Ember Data revision 12中刪除記錄的正確方法是什麼?

我已經有了,試圖刪除一條記錄的ArrayController一個簡單的方法,並從模板中的一個動作叫:

deleteFact: function(fact) { 
    self=this; 
    window.App.confirm(Em.I18n.t('Delete fact?'), { 
    yes: function() { 
     fact.deleteRecord(); 
     fact.store.commit(); 
    } 
    }); 
} 

這總是以第一名的成績被刪除的作品,以及列表顯示記錄消失。我使用Rails,服務器處理DELETE並返回一個JSON空對象和status 200。如果我刪除其它記錄之後,任何時候先刪除我總是一個內部異常立即拋出:

Uncaught Error: Attempted to handle event deleteRecord on <App.Fact:ember402:31> while in state rootState.deleted.saved. Called with undefined

什麼是刪除記錄的正確途徑。我搜索了Google並找不到任何答案,並且源代碼和測試數據看起來像是這些都是必須完成的。

模板:

{{#each fact in content}} 
    <tr> 
     <td>{{fact.title}}</td> 
     <td>{{fact.body}}</td> 
     <td>{{#linkTo 'facts.show' fact}}View{{/linkTo}} | <a {{ action 'deleteFact' fact}} class="button small deny delete-button">Delete</a>[{{fact.id}}]({{fact.stateManager.currentState.path}})</td> 
    </tr> 
    {{else}} 
    <tr> 
    <td colspan='4'>No facts registered at present.</td> 
    </tr> 
{{/each}} 

模板輸出:

Title Facts   Actions 
asdfsd asdfsadf View | Delete[46](rootState.loaded.saved) 
asdfsd asdfsadf View | Delete[47](rootState.loaded.saved) 
asdfsd asdfsadf View | Delete[48](rootState.loaded.saved) 

輸出在控制檯:

點擊刪除與事實編號46的日誌記錄從是功能ID 46是安慰通過。記錄從模板顯示的列表中消失,留下id爲47和48的兩條記錄。單擊刪除記錄47在日誌中顯示記錄ID 46已再次通過。

+0

嘗試使用'App.store.commit()'而不是'fact.store.commit()' – chrmod 2013-04-23 08:36:32

+0

發生同樣的異常。 – jmcd 2013-04-23 13:17:32

回答

1

這應該工作得很好。

我的猜測是你不斷刪除相同的記錄。 deleteFact似乎被調用相同fact

UPDATE(試圖修復模板)

{{#each fact in controller}} 
    <tr> 
     <td>{{title}}</td> 
     <td>{{body}}</td> 
     <td>{{#linkTo 'facts.show'}}View{{/linkTo}} | <a {{ action 'deleteFact'}} class="button small deny delete-button">Delete</a></td> 
    </tr> 
    {{else}} 
    <tr> 
    <td colspan='4'>No facts registered at present.</td> 
    </tr> 
{{/each}} 

你FactsController:

FactsController = Ember.ArrayController.extend({ 
    itemController: 'fact' 
}); 

你FactController:

FactController = Ember.ObjectController.extend({ 
    deleteFact: function() { 
    self.get('content').deleteRecord();   
    self.get('content.transaction').commit(); 
    } 
}); 
+0

它是從{{action}}調用的,所以每個事實參考應該是不同的。 – jmcd 2013-04-23 22:37:05

+0

如果您可以提供一個樣本(jsfiddle)或更多的代碼,以便我可以重現該問題,這將會有所幫助。 – 2013-04-23 22:42:58

+0

@jmcd一個非常簡單的檢查就是'console.log(fact +「」)'來檢查ember guid。這將有助於確定您是否嘗試刪除相同的事實。 – hjdivad 2013-04-23 22:50:36

相關問題