2010-12-14 66 views
1

Contrôle client interne Je génère un bouton, avec script à exécuter. Je souhaite appeler la méthode Print() de l'objet lorsque ce bouton est cliqué, la valeur du résultat doit également être transmise à Print().Méthode d'objet client Ajax invoquant le paramètre

Comment puis-je faire cela?

Ceci est mon objet:

Type.registerNamespace("CustomControls"); 

CustomControls.FirstObj = function(element) { 
    CustomControls.FirstObj.initializeBase(this, [element]); 

    this._targetControlDelegate === null 
    this.markUp = '<div><input type="button" id="theButton" value="Button!" onclick="Foo()"/><script type="text/javascript">function Foo() {return "result";}</script></div>'; 

} 
CustomControls.FirstObj.prototype = { 

    dispose: function() {    
     CustomControls.FirstObj.callBaseMethod(this, 'dispose'); 
    }, 

    initialize: function() { 

      var div; 
      div = document.createElement('div'); 
      div.name = div.id = "divName"; 


      div.innerHTML = this.markUp;   
      document.body.appendChild(div);  

      var targetControl = $get("theButton"); 
//   if (targetControl != null) { 
//    if (this._targetControlDelegate === null) { 
//     this._targetControlDelegate = Function.createDelegate(this, this._targetControlHandler); 
//    } 
//    Sys.UI.DomEvent.addHandler(targetControl, 'click', this._targetControlDelegate); 
//   } 
     CustomControls.FirstObj.callBaseMethod(this, 'initialize'); 

    }, 
// _targetControlHandler: function(event) { 
//   
//  
// }, 

    _Print: function(result) { 
     //Alert Result 
    }, 


} 
CustomControls.FirstObj.registerClass('CustomControls.FirstObj', Sys.UI.Control); 
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

Mise à jour:
Je suppose qu'il n'y a pas de solution à mon problème.
Peut-être qu'il existe une approche alternative que vous pouvez suggérer?

+0

Pouvez-vous préciser ce que vous entendez par 'la valeur de résultat doit être passée à Print()'? Faites-vous référence à la valeur renvoyée par le gestionnaire 'onclick'? –

+0

oui, lorsque le bouton est cliqué, la fonction Foo() {return "result";} est invoquée. Je veux passer le résultat de ce truc à l'objet. – urker

+0

L'idée derrière ceci est: l'objet reçoit le balisage, n'importe quel balisage, (avec quelques scripts) en entrée, le résultat du script devrait être retourné à l'objet. – urker

Répondre

0

Une façon serait de stocker l'objet FirstObj dans une propriété du bouton, il vient d'être créé:

initialize: function() { 
    var div = document.createElement("div"); 
    div.name = div.id = "divName"; 
    div.innerHTML = this.markUp; 
    document.body.appendChild(div); 

    var targetControl = $get("theButton"); 
    targetControl.__firstObj = this; 

    CustomControls.FirstObj.callBaseMethod(this, 'initialize'); 
} 

qui vous permettra d'utiliser cette propriété pour faire référence à l'objet FirstObj dans votre balisage:

CustomControls.FirstObj = function(element) { 
    CustomControls.FirstObj.initializeBase(this, [element]); 

    this._targetControlDelegate = null; 
    this.markUp = '<div><input type="button" id="theButton" value="Button!"' 
     + 'onclick="this.__firstObj._Print(Foo());" />' 
     + '<script type="text/javascript">function Foo() {return "result";}' 
     + '</script></div>'; 
} 
+0

Je vais essayer ce dernier aujourd'hui. – urker