繁体   English   中英

骨干/ Dropzone:如何正确处理Dropzone实例

[英]Backbone / Dropzone : How to properly dispose a Dropzone instance

我的应用程序实例化了很多dropzone元素。 通过导航,我实例化了Dropzone,但是当用户离开另一个页面时,我需要适当地放置Dropzone来保持我的文档事件/ DOM干净。

我在主干/ requirejs应用程序中使用Dropzone的amd版本。

该文档说要调用disable()方法来删除所有dropzone事件侦听器。 我调用disable方法,然后从DOM中删除该元素。 这是正确清洁Dropzone的安全方法吗? Dropzone模块是否仍保留对此已删除的Dropzone元素的引用?

这是我用于在主干应用程序中“作为视图”呈现dropzone元素的代码。 我需要使“删除”功能正确清理Dropzone实例:

define(['backbone','dropzone-amd-module'], function(Backbone, Dropzone){
    // Prevent Dropzone from auto discovering this element:
    Dropzone.options.myAwesomeDropzone = false;
    // This is useful when you want to create the
    // Dropzone programmatically later
    // Disable auto discover for all elements:
    Dropzone.autoDiscover = false;

    return Backbone.View.extend({
        tagName: 'div',
        className: 'dropzone',
        dropzone_reference: null,
        render: function(){
            this.initDropzone();
            return this;
        },
        initDropzone: function(){
            // init dropzone (avoid to init more than once!)
            if( !this.dropzone_reference)this.dropzone_reference = new Dropzone(this.el, this.options);
        },
        remove: function(){
            // remove dropzone instance
            this.dropzone_reference.disable();
            Backbone.View.prototype.remove.apply(this, arguments);
        }

    });
}

骨干view.remove()

remove: function() {
  this._removeElement();
  this.stopListening();
  return this;
},

从DOM中删除视图的元素。

如您所说,drop方法确实删除了事件处理程序:

如果不再需要放置区,只需在对象上调用.disable()即可。 这将删除元素上的所有事件侦听器

由于view.remove()会从DOM中删除元素本身,因此即使.disable()似乎也没有必要。

对dropzone模块的唯一引用是视图的dropzone_reference属性。 当没有对该视图的引用时,将对其进行垃圾收集,而dropzone模块将不包含任何引用,这将反过来又进行垃圾收集。

只要确保您没有保留任何对销毁视图的引用即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM