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)
您需要_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 效果已经完成) )即使服务器无法访问并且模型仍然存在。
| 归档时间: |
|
| 查看次数: |
822 次 |
| 最近记录: |