2014-02-04 4 views
2

Предположим, у меня есть приложение задач.Как получить доступ к удаленным записям в ember?

Когда пользователь обновляет задачу, кнопка обновления включена и отображается количество обновленных записей. Я не могу реализовать это, когда удаляю запись.

Для обновления это легко сделать в контроллере:

App.TasksController = Ember.ArrayController.extend({ 
    changedAmount: function(){ 
     @filterBy('isDirty', true).get('length'); 
    }.property('[email protected]'); 
}) 

Но тогда, когда я удалить запись с помощью функции deleteRecord не удается получить количество измененных/удаленных записей. Пример:

App.TasksRoute = Ember.Route.extend({ 
. 
. 
    actions: { 
     delete: function(task){ 
      task.deleteRecord() 
     } 
    } 
}); 

Как я могу получить доступ удаленных записей или, по крайней мере, их количество?

Моя среда:

Ember  : 1.3.1.1 
Ember Data : 1.0.0-beta.6 
Handlebars : 1.2.1 
jQuery  : 1.10.2 

ответ

1

Похоже собственности вы ищете является isDeleted. Таким образом, вы могли бы изменить этот контроллер, чтобы быть как:

App.TasksController = Ember.ArrayController.extend({ 
    dirtyTasks: Ember.computed.filterBy('content', 'isDirty', true), 
    deletedTasks: Ember.computed.filterBy('content', 'isDeleted', true), 
    changedTasks: Ember.computed.union('dirtyTasks', 'deletedTasks') 
}); 

Update:

Я понимаю, что вы имеете в виду о содержании быть autoupdated. Я отследил этот файл до recordArrayManager, который используется хранилищем Ember. Когда вы выпускаете либо find, либо filter в хранилище, то, что возвращается, является фильтрованный массив записей, и один из фильтров, применяемых к этому массиву, состоит в том, что ни одна из записей в нем не может находиться в состоянии isDeleted. Вы можете видеть это в действии here.

Сверху моей головы я не вижу решения, которое я особенно доволен. Но если вам абсолютно необходимо, чтобы содержимое в контроллере массива включало deletedRecords, вам необходимо переопределить метод, связанный с ним выше в пользовательском классе RecordArrayManager, а затем установить этот recordArrayManager в инициализацию для хранилища вашего приложения, как seen here.

Here's a jsbin demonstrating it

Обратите внимание, что это грязный хак, и вы действительно не должны это делать. Честно говоря, я считаю, что лучшим решением было бы вместо того, чтобы удалять запись с использованием методов ember data, придумать ваше собственное флаговое состояние customIsDeleted и установить модель в этом состоянии, а не удалять ее прямо, если вы действительно хотите, чтобы она осталась на экране.

+0

Я пробовал что-то вроде этого, но он не работает, поскольку запись удаляется из массива 'content', как только я запускаю' deleteRecord() '. Поэтому удаленные записи не могут быть доступны напрямую. Вопрос в том, как это можно сделать? ... – SimonW

+0

Как вы устанавливаете 'content' на контроллере? – Adam

+1

Мои данные загружаются через RESTAdaptor, а 'deleteRecord()' автоматически удаляет его из 'content'. – SimonW

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