Backbone.js`model.destroy()`自定义转换?

Gar*_*man 6 javascript jquery backbone.js marionette

当我使用Backbone时model.destroy(),它似乎会自动从DOM中删除该视图.

有没有办法让我用来destroy()发送DELETE请求,但是自己从DOM中删除视图?

就像是:

this.model.destroy({
    wait: true,
    success: function(){
        $('#myElement').animate({
            "height" : "0",
            1000,
            function(){$('#myElement').remove()}
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 2

您需要_onCollectionRemove()在包含项目视图(文档)的集合视图中进行覆盖。这是当您的模型从集合中删除时调用的函数,它也是破坏您的视图的函数。具体如何选择覆盖它取决于您,但使用动画函数覆盖它可能是最简单的,也许按照以下方式......

_onCollectionRemove: function(model) {
  var view = this.children.findByModel(model);
  var that = this;
  view.$('#myElement').animate({
        "height" : "0",
        1000,
        function(){
            that.removeChildView(view);
            that.checkEmpty();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在回调中手动处理视图的删除destroy,只需覆盖_onCollectionRemove()以包含一个空函数,并在删除请求的回调中执行您想要的任何操作。不过,我建议您使用上面描述的方法,而不是在destroy回调中执行此操作。完全消除该函数然后在代码中的其他位置处理它的职责会干扰 Marionette 的预期事件流。只需使用不同的 UI 效果覆盖该函数即可保持自然流程。

编辑destroy:另一个用户之前的答案(现已因投票而删除)表明,在 UI 效果完成后调用可能是明智的。这不是一个好方法,因为 OP 指出的原因 - 如果该方法出现问题destroy(例如,如果远程服务器出现故障),用户会觉得模型已被删除(UI 效果已经完成) )即使服务器无法访问并且模型仍然存在。