изменение (уничтожение) во вложенной модели не вызывает обновления представления - PullRequest
0 голосов
/ 04 января 2012

У меня есть приложение backbone.js с вложенной моделью (каждый почтовый ящик Think с сообщениями)

Я воспользовался советом из другого вопроса о переполнении стека, в котором я установил «родителя» для каждого объекта коллекции сообщений так,что я мог бы вернуться к этим родительским объектам.

При добавлении дочернего объекта я могу использовать эту стратегию для сброса свойства родительского объекта, чтобы обновить представление родительского объекта - что я хочу, так какпоказывает совокупное количество своих детей.Например, этот coffeescript:

@collection.create(@model.toJSON(),
  success: (message) =>
    @model = message
    @collection.parent.set({"message_count": @collection.length})
    window.location.hash = ""
  error: (message, jqXHR) =>
    @model.set({errors: $.parseJSON(jqXHR.responseText)})
)

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

Вот один из способов, которым я пытаюсь:

destroy: () ->
  collection = @model.collection
  parent = @model.collection.parent
  @model.destroy()
  this.remove()
  collection.remove(@model)
  parent.set({"message_count": collection.length})
  return false

Это устанавливаетзначение родительского объекта, но представление не обновится.

Я также могу попробовать это следующим образом - где я пытаюсь дождаться успешного завершения с сервера, чтобы сообщить мне, что я могу обновить свое представление:

destroy: () ->
  collection = @model.collection
  @model.destroy( 
    success:(resp) ->
      alert ("in success")
      collection.remove(@model)
      collection.parent.set({"message_count": collection.length})
    error:(resp) ->
      alert ("in error" + resp) 
  )
  this.remove()
  return false

Проблема, которую я здесь вижу, заключается в том, что, хотя сервер правильно удаляет дочерний объект и отправляет ответ 200 клиенту, выполняется только код ошибки!и что бы я здесь ни делал, я в одной лодке - родительский вид не обновится.

Кто-нибудь может объяснить, почему?

Заранее спасибо ...

...