2016-07-23 15 views
-1

Ich habe eine Klasse mit dem Namen TestClass. Es hat eine Objekt Mitglied und eine testFunc Funktion.
In ToolTipDialog hat es Radiobutton.
Es wird erwartet, dass wenn Benutzer auf das Optionsfeld klickt es testFunc ausführen.
Meine Frage ist: Wie bekomme ich den übergeordneten Kontext (TestClass), wenn Benutzer auf den Radio-Button klickt? Konnte etwas wie TestClass.testFunc() ausführen.
Wenn ich mit testFunc versucht, der Fehler war: testFunc is not defined
Wenn ich mit this.testFunc versucht, der Fehler war this.testFunc is not a functionWie bekomme ich den richtigen Kontext des Objekts in Javascript

Der Code der TestClass wie unten ist, der Fiddle Link ist js code

define(["dojo/_base/declare","dojo/dom","dojo/on","dojo/_base/lang","dijit/registry", 
     "dijit/TooltipDialog","dijit/popup","esri/InfoWindowBase", 
     "dojo/_base/array"], 
    function (declare,dom,on,lang,registry,TooltipDialog,popup,InfoWindowBase,Array) { 
    return declare( 
     InfoWindowBase, 
       { 
      constructor: function (parameters) { 
       //lang.mixin(this, parameters); 
       this.son = ""; 
      }, 
      //member of the ParentClass 
      init: function () { 
       var tpContent = '<div id="dp1"><label for="name">first:</label> <input type="radio" id="first" checked value="pri"/>' + 
        '<br><label for="hobby"> second:</label> <input type="radio" id="second" value="sec"/></div>'; 

       this.inherited(arguments); 
       this.son = new TooltipDialog({ 
        content: tpContent, 
        onMouseLeave: function (e) { 

        } 
       , 
        onOpen: function (e) { 
        var sHu=dom.byId("first"); 
         on(sHu,"click", function(){ 
          // this.testFunc(); 
         }); 

        }, 

       }); 

       popup.open({ 
        popup: this.son, 
        orient: ["above","below"], 
        around: dom.byId("tpHolder") 
       }); 

      }, 
      testFunc:function(){ 
       console.log("testFunc"); 
      } 
     } 
    ); 

}); 
+0

Was ist die Frage? Bitte überprüfen Sie [fragen] – charlietfl

Antwort

0

Als @T Kambi sagte, Sie müssen hitch verwenden. Aber es Ihnen Fall müssen Sie doppelt hitch:

onOpen: lang.hitch(this, function (e) { 
    var sHu=dom.byId("first"); 
    on(sHu,"click", lang.hitch(this, function(){ 
      this.testFunc(); 
    })); 
}), 

Die erste hitchthis machen die TestClass im onOpen Verfahren und die zweite hitch machen die this der onOpen Methode ist dabei die this der sein click Handler.

fixiert ich die JSFiddle, so haben Sie einen Blick: https://fiddle.jshell.net/etxx1o0s/5/

+0

Vielen Dank für Ihre Hilfe! @ben, @T Kambi –

0

Der Kontext des Ereignisses wird immer das Steuerelement/der Knoten sein, auf dem das Ereignis stattfindet. In diesem Fall ist es das Objekt: sHu. Sie können den Kontext mithilfe der lang.hitch-Methode ändern.

on(sHu,"click", lang.hitch(this, function(){ 
    this.testFunc(); 
})); 

Es wird nicht passieren this erforderlich, können Sie zu jedem Objekt, das Sie als Kontext der Funktion wollen ändern.

+0

Hallo @T Kambi, ich habe versucht, die lang.hitch wie oben. Hier zeigt das "this" auf "Object {id: dijit_TooltipDialog_0}". Hier sollte auf die "TestClass" hingewiesen werden. Ich weiß nicht, wie man das TestClass-Objekt hält. –