2011-12-30 2 views
1

Есть ли способ подсчитать количество объектов, созданных и уничтоженных в mootools?Контрольное число объектов, созданных в MooTools

Пусть этот случай:

var Animal = new Class({ 
    initialize: function(){}, 
    create: function() { 
     alert('created!'); 
    }, 
    destroy: function() { 
     alert('destroyed'); 
    } 
}); 

var AnimalFactory = new Class({ 
    initialize: function() { 
     for(i=0;i<10;i++) { 
      this.add(new Animal()); 
     } 
    }, 
    add: function(animal) { 
     this.animalsContainer.push(animal); 
    }, 
    delete: function(animal) { 
     this.animalsContainer.remove(animal); 
    } 
}); 

var animalFactory = new AnimalFactory(); 

Я знаю, сколько животных я создал в начале, но, представьте, что где-то в коде животное уничтожить функцию от конкретного экземпляра животного называется (код не показан здесь). как я могу сделать обновление массива animalContainer правильно с одним меньшим?

Любая помощь будет очень признательна.

Спасибо!

ответ

0

Вы можете использовать Events класс как смесь-в, так что он уведомляет завод гибели животного ...

var Animal = new Class({ 

    Implements: [Events,Options], // mixin 

    initialize: function(options){ 
     this.setOptions(options); 
    }, 
    create: function() { 
     alert('created!'); 
     this.fireEvent("create"); 
    }, 
    destroy: function() { 
     alert('destroyed'); 
     this.fireEvent("destroy", this); // notify the instance 
    } 
}); 

var AnimalFactory = new Class({ 
    animalsContainer: [], 
    initialize: function() { 
     var self = this; 
     for(i=0;i<10;i++) { 
      this.add(new Animal({ 
       onDestroy: this.deleteA.bind(this) 
      })); 
     } 
    }, 
    add: function(animal) { 
     this.animalsContainer.push(animal); 
    }, 
    deleteA: function(animal) { 
     this.animalsContainer[this.animalsContainer.indexOf(animal)] = null; 
     animal = null; // gc 
    } 
}); 


var foo = new AnimalFactory(); 
console.log(foo.animalsContainer[0]); 
foo.animalsContainer[0].destroy(); 
console.log(foo.animalsContainer[0]); 

смотреть его запустить: http://jsfiddle.net/dimitar/57SRR/

это пытается сохранить индексы/длина массива нетронутыми, если вы их сохраните

+0

Эй, это отличный ответ! Я знал о fireEvent, но эти строки: this.fireEvent («destroy», this); // уведомляет экземпляр и this.add (новое животное ({ OnDestroy: this.deleteA.bind (это) })); был для меня ключом. Спасибо! –

Смежные вопросы