То, что вы видите, является правильным. Глядя на the documentation on model.destroy
(или хочет the code) мы можем видеть, что это в основном делает две вещи:
- HTTP удаления представления сервера модель
- Удаляет модель из любых содержащих коллекций
Обратите внимание, что ничего не происходит с самой моделью или с любыми объектами, к которым может быть привязана модель.
Мы можем увидеть это поведение с помощью простого примера:
var foo = new Backbone.Model({foo: 'bar'});
var foos = new Backbone.Collection([foo]);
var fooView = new Backbone.View();
fooView.model = foo;
foo.destroy({success: function() {
console.log('success');
}});
console.log(foo, foos, fooView);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js"></script>
Обратите внимание, что ничего не происходит foo
или fooView.model
после выполнения этого кода, хотя foos
больше не содержит экземпляр foo
.
Удаление view.model
Если вы хотите, чтобы удалить модель с точки зрения вы можете использовать обратный вызов успеха. Просто измените delete
метод вашей точки зрения (от вашего вопроса) к чему-то вроде следующий:
delete: function() {
this.model.destroy({success: function() {
delete this.model;
}.bind(this)});
}
В качестве альтернативы, так как мы знаем из документации, что модель будет стрелять из "destroy"
события, мы также можем слушать для этого события и огня обратный вызов, который удаляет нашу модель.
Я думаю, что так оно и работает. Я посмотрел на источник Backbone, и он показывает, что 'destroy' отправляет на сервер запрос DELETE и отбрасывает модель из всех объектов, которые он прослушивает. Я ничего не вижу об исключении объекта модели. – 76484