Encore un problème d'abonnement d'évenement. Voici un contrôle utilisant la syntaxe Atlas qui ne fait que créer un bouton et s'abonner à son événement click pour afficher la propriété foo du contrôle.
Type.registerNamespace('CS.UI');
CS.UI.MonControl = function(element){
CS.UI.MonControl.initializeBase(this, [element]);
}
CS.UI.MonControl.prototype = {
_foo : null,
_button : null,
get_foo : function(){
return this._foo;
},
set_foo : function(value){
this._foo = value;
},
initialize : function(){
CS.UI.MonControl.callBaseMethod(this, 'initialize');
this._createDom();
},
dispose : function(){
CS.UI.MonControl.callBaseMethod(this, 'dispose');
$clearHandlers(this._button);
},
_createDom : function(){
this._button = document.createElement('button');
this._button.appendChild(document.createTextNode('button'));
$addHandler(this._button, 'click', this._btnclick);
// même problème en utilisant btn.onclick = this._btnclick;
this._element.appendChild(this._button);
this._element.appendChild(document.createElement('br'));
},
_btnclick : function(){
this._dummyMethod(); // Ligne 84 : l'erreur se trouve ici
},
_dummyMethod : function(){
Sys.Debug.trace('foo vaut : ' + this._foo);
}
}
CS.UI.MonControl.registerClass('CS.UI.MonControl', Sys.UI.Control);
$create(CS.UI.MonControl, {
'foo' : 'je suis foo'
}, {}, null, $get('div1'));
// équivalent à
// var o = new CS.UI.MonControl($get('div1'));
// o.set_foo('je suis foo');
// o.initialize();