javascript - 使用 Backbone 的模型#destroy 后,如何摆脱附加到 View 的模型?

标签 javascript backbone.js view destroy

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

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

最佳答案

您所看到的是正确的。看着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>

请注意,执行此代码后,foofooView.model 没有任何变化,尽管 foos 不再包含 的实例foo.

移除 View 模型

如果您想从 View 中删除模型,您可以利用成功回调。只需将 View 的 delete 方法(从您的问题)更改为如下所示:

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

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

关于javascript - 使用 Backbone 的模型#destroy 后,如何摆脱附加到 View 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37580871/

相关文章:

javascript - jQuery DOM 遍历子菜单后代

javascript - JS React 网站最好的无限滚动工具/组件?

java - 如何在android中使用网格布局将屏幕分成4等份?

javascript - window.opener 在弹出窗口中重定向后无用 (JavaScript)

javascript - 在javascript中测试2个字符串之间的常用词

javascript - 如何处理共享同一集合的多个 Marionette CollectionView

javascript - 即使 HTML 元素没有附加到 DOM,它们也会加载吗? Backbone 观点呢?

javascript - Chaplin/Backbone 问题 - 将项目添加到集合时未触发 "Add"事件

android - 在一个 View 上隐藏/显示动画,当同时发生时 - Android

javascript - 主干 View 显示引用错误?