2013-04-23 3 views
2

Я использую ревизию 12 данных Ember.Каков правильный способ удаления записи в 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 и не могу найти ответы, и исходный код и тесты для данных ember выглядят так, как будто это все, что нужно сделать.

Шаблон:

{{#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) 

Выход в консоли:

Нажатие удалить на запись с Fact Id 46 журналов на консоль от функции да что идентификатор 46 был прошло. Запись исчезает из списка, отображаемого шаблоном, оставляя две записи с идентификатором 47 и 48. Щелчок по удалению для записи 47 показывает в журнале, что идентификатор записи 46 был снова принят.

+0

Попробуйте использовать 'App.store.commit()' вместо 'fact.store.commit()' – chrmod

+0

Такое же исключение. – jmcd

ответ

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

+0

Если бы вы могли предоставить образец (jsfiddle) или больше кода, чтобы я мог воспроизвести проблему, это было бы полезно. –

+0

@jmcd очень простая проверка на 'console.log (fact +" ")', чтобы проверить ember guids. Это поможет определить, пытаетесь ли вы удалить тот же факт. – hjdivad

Смежные вопросы