2011-12-30 45 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类作为一个mix-in,这样它会通知动物死亡的工厂......

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(“摧毁”,这个); //通知实例 和 this.add(新动物({ 的onDestroy:this.deleteA.bind(本) })); 是我的关键。 谢谢! – 2011-12-30 13:13:33

相关问题