Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Quizz JavaScript : objet et abonnement d'evenement

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();

Lorsque l'on click sur le bouton on obtient une erreur :

Untitled

Le code intéressant se trouve au niveau de la méthode _createDom et _btnClick, tout le reste n'est que la plomberie lié à la création de contrôle via Microsoft Ajax library.

Alors, comment corriger ce problème ?

Posted: dimanche 12 août 2007 18:37 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

simon ferquel a dit :

Je vois 2 solutions :

Function.createDelegate(...) pour appeler _btnClick dans le bon context, et une solution plus générique (pas besoin d'Atlas):

var thisCtrl = this;

btn.onclick = function()

{

  thisCtrl._btnClick();

}

# août 12, 2007 21:48

cyril a dit :

wahouuu ! finalement tu sais faire du js ;-)

et sans utiliser Atlas mais en gardant le this._btnClick() ? comment qu'on pourrais faire ?

# août 12, 2007 22:04

simon ferquel a dit :

Ca je sais pas, à la base je suis développeur, pas web master :p

# août 13, 2007 09:05

FREMYCOMPANY a dit :

Comme je connais pas ATLAS, je m'abstient de proposer des solutions ALTAS mais pour répondre à "et sans utiliser Atlas mais en gardant le this._btnClick() ? comment qu'on pourrais faire ? ", je pense à apply/call...

Sinon oui, moi j'ai développé Function.prototype.toDelegate (qui joue avec apply justement) dans mon framework donc j'aurais fait comme ca : this._btnOnClick.toDelegate(this);

# août 13, 2007 11:11

Erebuss a dit :

HiHiHi

J'adore ta réponse Simon ^^

# août 13, 2007 11:11

FREMYCOMPANY a dit :

CODE simplifié de Function.prototype.toDelegate : function(baseObject) { var f=this; return function() { f.apply(baseObject, arguments); }}

# août 13, 2007 11:13

cyril a dit :

quoi ? insinues tu que faire du javascript ce n'est pas du developpement ?

Ce qui faut pas entendre :p

oui il faut passer par les méthodes apply et call, mais comment ?

# août 13, 2007 11:14

FREMYCOMPANY a dit :

@cyril : J'ai posté le code de ma fonction toDelegate, ca montre le principe, ensuite, on peut l'adapter pour la rendre approprié au cas qui nous intéresse :

var f=this._btnOnClick;

... (function(baseObject) { return function() { f.apply(baseObject, arguments); }})(this) ...;

# août 13, 2007 11:29

cyril a dit :

arf oui, j'avais pas vu, t'as posté ton comment 1 minute avant le mien :-)

# août 13, 2007 11:47

coq a dit :

"quoi ? insinues tu que faire du javascript ce n'est pas du developpement ?"

beeeeeeeen

Que quelqu'un éloigne aurel de ce post :p

# août 13, 2007 11:51
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25