窗口关闭后,Ext JS Hash Map没有被销毁

时间:2018-02-07 20:20:12

标签: javascript extjs

基本上只是想在窗口关闭后创建一个新的hashmap,因为它在关闭并呈现一个新窗口后仍然会有旧的值。

 data: {
     classCheck: false,
     hashTable: new Ext.util.HashMap(),
     countValid: 0
  }

 listeners: {
       afterrender: function() {
          var scope = this;
           window.addEventListener('resize', function() {
               scope.updateWindow(scope);
           });

           this.on('close', function(scope) {
               this.getViewModel().data.hashTable = new Ext.util.HashMap();
               window.removeEventListener('resize', scope.updateWindow);
          });
     },

  },


  renderer: function(value, cell_field1, cell_field2, cell_field3) {
           var hashmap = this.up('classroom').getViewModel().data.hashTable;

1 个答案:

答案 0 :(得分:0)

JavaScript使用prototyping来实现类继承。窗口是窗口类的实例,由于原型设计的性质,窗口实例引用了类上定义的属性,直到实例显式设置它们为止。

Ext.define('Fiddle.Class', {
    boolean: true,
    object: {},

    constructor: function() {
        /* 1. Instance  Prototype
              {         {
                          boolean: true,
                          object: {}
              }         }
        */

        this.boolean = false;
        this.object.key = false;
        this.object = {};
        /* 2. Instance                Prototype
              {                       {
                boolean: false,         boolean: true,
                object: { key: true }   object: { key: false },
                                        instance: null
              }                       }
        */

        // This returns true.
        return this.object.key;
    }
});

因此,窗口实例需要在初始化期间设置作为对象或数组的属性的值,以便每个实例都获得自己的副本。这可以在类上定义,通常在构造函数中完成,以便尽可能早地获得数据。

Ext.define('Fiddle.window.Window', {
    extend: 'Ext.window.Window',

    data: null,

    constructor: function(config) {
        this.data = {
            classCheck: false,
            hashTable: new Ext.util.HashMap(),
            countValid: 0
        };

        this.callParent(arguments);
    }
});