在使用 Backbone 的模型#destroy 后,我如何摆脱附加到视图的模型?
How do I get rid of model attached to view after using Backbone's model#destroy?
我看到成功回调,但在调试器 Chrome 开发工具中,当我输入 this.model
时我仍然看到模型。我知道它在服务器端被破坏了,但是你能解释一下为什么它仍然附加到视图吗?我该如何摆脱它?
delete: function () {
this.model.destroy({success: function () {console.log("success in destroy");}});
debugger;
}
您所看到的是正确的。查看 the documentation on model.destroy
(or looking to 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"
事件,我们还可以侦听该事件并触发一个删除我们模型的回调。
我看到成功回调,但在调试器 Chrome 开发工具中,当我输入 this.model
时我仍然看到模型。我知道它在服务器端被破坏了,但是你能解释一下为什么它仍然附加到视图吗?我该如何摆脱它?
delete: function () {
this.model.destroy({success: function () {console.log("success in destroy");}});
debugger;
}
您所看到的是正确的。查看 the documentation on model.destroy
(or looking to 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"
事件,我们还可以侦听该事件并触发一个删除我们模型的回调。