在使用Backbone的模型#dump后,如何摆脱附加到视图的模型?

时间:2016-06-02 00:30:51

标签: javascript backbone.js view destroy

我看到了成功回调,但在调试器Chrome开发工具中,当我输入this.model时,我仍然看到该模型。我知道它在服务器端被破坏了,但你能解释为什么它仍然附加在视图上吗?我该如何摆脱它?

        delete: function () {
            this.model.destroy({success: function () {console.log("success in destroy");}});
            debugger;
        }

1 个答案:

答案 0 :(得分:2)

你所看到的是正确的。看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>
&#13;
&#13;
&#13;

请注意,执行此代码后foofooView.model没有任何操作,但foos不再包含foo的实例。

删除view.model

如果要从视图中删除模型,可以使用成功回调。只需将您的观点delete方法(从您的问题)更改为以下内容:

delete: function () {
    this.model.destroy({success: function () {
        delete this.model;
    }.bind(this)});
}

或者,由于我们从文档中知道该模型将触发"destroy"事件,我们也可以侦听该事件并触发删除我们模型的回调。