подчеркните, что каждый метод не проходит через всю коллекцию магистралей - PullRequest
0 голосов
/ 07 марта 2012

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

Затем у меня есть одна кнопка сохранения, которая запускает события сохранения / удаления в коллекциях.

Сохранения работают просто отлично, но работает только половина моих удалений, и я в замешательстве.

class MyApp.Collections.DeletedTasks extends Backbone.Collection
  model: MyApp.Models.Task

  destroy: () ->
    console.log('destroy the collection size: ' + @.models.length)
    _.each(@.models, @sendDelete)

  sendDelete: (model) ->
    console.log('deleting model with id: ' + model.get('id'))
    model.destroy()

Консольный вывод

Done with Adding/Updating Collections
destroy the collection size: 6
deleting model with id: KSc18d06fefddbebd2ade74bcab4c670c907
deleting model with id: KS07cb95935b1caf3817758739224a3e1a2f
deleting model with id: KS6f473b3e15740fe7c6c0909e14986700a9

Что случилось? Почему это только 3? Как мне отладить это?

Любая помощь приветствуется!

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Тим уже дал хороший ответ, но есть лучший способ:

Итерационные методы Underscore уже являются частью коллекций Backbone, что означает, что вместо

_.each(@.models, @sendDelete)

Вы можете просто написать

@each(@sendDelete)

Это также заботится о преобразовании @models в массив для вас, предотвращая путаницу в destroy() итерации.

Вы никогда не должны использовать @models напрямую; его следует рассматривать как внутреннее свойство, например @attributes в моделях.

3 голосов
/ 07 марта 2012

сначала скопируйте коллекцию в массив. Вы удаляете из перечисляемой коллекции. Я не гуру сценаристов, а что-то вроде:

_.each(@.models.toArray(), @sendDelete)

...