2016-01-15 9 views
5

Ich erstelle eine einfache jQuery-Erweiterung (es ist meine erste).jQuery-Erweiterung erstellen. Probleme mit Bereich

(function($){ 
    var MyClass = function(opt){ 
    //.. 
    }; 
    //one of the methods of my extension 
    $.fn.myExtension = function(opt){ 
    this._ext = new MyClass(opt); 
    return this; 
    }; 
    $.fn.myExtensionOtherMethod = function(){ 
    if(this._ext){ 
     //do something .. 
    } 
    return this; 
    }; 
}(jQuery)); 

//using .. 
$(document).ready(function(){ 
    $('#selector').myExtension({ 
    //options .. 
    }); 
    $('#selector').myExtensionOtherMethod(); 
}); 

wenn i Methode aufrufen $('#selector').myExtensionOtherMethod();, this nicht enthält this._ext Variable. Ich weiß, dass dies ein anderer Bereich ist, aber ich weiß, dass es eine Möglichkeit gibt, auf diese Variable in beiden Methoden zuzugreifen. Wie kann ich das tun?

+0

Was ist Ihr Endziel, möchten Sie eine neue Instanz von myClass oder Optionen für jedes Element, das dem Selektor entspricht, oder eine einzelne Instanz von myClass, die von Ihrer Erweiterung verwendet wird, egal welches Element ausgewählt ist? –

+0

Sie erstellen jedes Mal ein anderes Objekt, wenn Sie '$ ('# selector')' verwenden. – charlietfl

+1

Was versuchst du zu erreichen? Die Verwendung von 'data()' wird wahrscheinlich helfen – charlietfl

Antwort

2

Dies ist nicht wirklich ein Problem Bereich. Dies liegt daran, dass der jQuery-Prototyp $.fn Ihnen ein jquery-Objekt als this gibt. Auch wenn Sie jedes Mal dasselbe Element auswählen, wenn ein neues jQuery-Objekt als Kontext festgelegt wird, sodass die Eigenschaft nicht mehr vorhanden ist. Sie können diese Eigenschaft auf das DOM-Element setzen und das gewünschte Ergebnis erzielen.

(function($) { 
    var MyClass = function(opt) {}; 
    //one of the methods of my extension 
    $.fn.myExtension = function(opt) { 
     this[0]._ext = new MyClass(opt); 
     return this; 
    }; 
    $.fn.myExtensionOtherMethod = function() { 
     if (this[0]._ext) { 
      //do something .. 
     } 
     return this; 
    }; 
}(jQuery)); 

//using .. 
$(document).ready(function() { 
    $('#selector').myExtension({ 
     //options .. 
    }); 
    $('#selector').myExtensionOtherMethod(); 
}); 

Dies ist nur ein kurzes Beispiel oben. Wenn Ihr Wähler mehr als ein Element findet, sollten Sie diese durchgehen. Aber ich habe nur den ersten Index genommen, seit du nach ID gesucht hast.

Fiddle: https://jsfiddle.net/AtheistP3ace/gd1ehk0d/

Wie oben durch @charlietfl erwähnt, ich mit dieser Bemerkung zustimmen. Ich bin froh zu erklären, warum das, was du getan hast, nicht funktioniert hat, aber es könnte bessere Wege geben, das zu erreichen, wonach du suchst.

Verwandte Themen