2016-06-27 8 views
0

In this question wurde vom OP gefragt, wie vermieden werden kann, dass private Objekte in einer Komponente nach außen freigelegt werden. Ich habe gegoogelt und finde keinen Weg, das Gegenteil zu tun. Angenommen, ich habe die unten stehende Komponente und möchte entweder von meiner Webseite oder einer übergeordneten Komponente aus auf privateObj zugreifen. Wie kann es mit JavaScript und der Polymer API gemacht werden?Wie kann auf private Objekte im Skript einer Komponente zugegriffen werden?

<polymer-element name="animating-element"> 
    <script>  
    var privateObj = {}; 

    privateObj.internalState = 0; 

    //private static method 
    privateObject.setupState = function(polymerObject) { 
     if(polymerObject.stateExposedToOutside == /* some conditions */) { 
      privateObject.internalState = 1; 
     } 
    } 

    Polymer('animating-element', { 
     stateExposedToOutside: 0, 
     ready: function() { 

      privateObj.setupState(this); 
      this.animate(); 

     }, 
     animate: function() { 

     } 
     });  
    </script> 
</polymer-element> 
+1

Um zu klären, ist Ihre Frage "Wie mache ich ein privates Objekt nicht privat?" Was wäre der Sinn, Dinge dann privat machen zu können? – ceejayoz

+0

@ceejayoz Ja, ich weiß, dass das Freilegen privater Sachen gegen die Verkapselungsprämisse der Komponenten ist, aber wenn es irgendwie getan werden kann, würde ich es bevorzugen, da es eine Drittanbieterkomponente ist und ich nicht darauf warten kann, dass der Autor eine Pull-Anfrage akzeptiert und versenden Sie die gepatchte Anwendung. Genau darum geht es auch bei Polymer, nicht um die Lücke zu füllen, mittlerweile um die Standardisierung von Web-Komponenten. – rraallvv

+0

Es ist nicht gegen die "Prämisse", es ist gegen die * Funktionalität der Sprache *. Sie müssen wahrscheinlich die Komponente forkieren, bis der PR zusammengeführt ist (oder wenn er abgelehnt wird). Es ist ein privates Objekt. Der ganze Punkt, dass es privat ist, ist, dass es privat ist. – ceejayoz

Antwort

1

Sie können eine public Methode innerhalb Polymer Konstruktor erstellen, die den Wert Ihrer privateObj

privateObjValue:function(){ 
    return privateObj; 
} 

Jetzt zurückkehren Sie den Wert des Objekts lesen kann this.privateObjValue() (nicht sicher verwenden, wie es in Polymer 0.5 funktioniert)