2017-01-25 8 views
0

Entschuldigung für die Unannehmlichkeiten (mein Englisch ist nicht sehr gut und ich benutze den Übersetzer, um dies zu schreiben). Ich habe genug gesucht in StackOverFlow und anderen Websites suchen und ich finde nicht die Antwort, die ich brauche. Ich arbeite an einem Projekt mit Polymer, in dem ich Funktionen erklärt sich wie folgt:Zugriff auf Polymerfunktionen von Javascript

Polymer({ 
    is: 'LaserLand-Cronometro', 
    properties: { 
    jugadores: Object, 
    minuto: Number, 
    segundo: Number, 
    centesima: Number, 
    hora:{ 
     type: String, 
     value: '00:00:00' 
    }, 
    task: Number 
    }, 
    cronometro: function(){ 
    this.centesima++ 
    if(centesima>99){ 
     this.centesima=0 
     this.segundo++ 
    }else if(segundo > 59){ 
     this.segundo=0 
     this.minuto++ 
    } 
    let mm; 
    let ss; 
    let cc; 
    if(this.centesima<9){cc='0'+this.centesima} 
    if(this.segundo<9){ss='0'+this.centesima} 
    if(this.minuto<9){mm='0'+this.minuto} 
    this.hora=mm+':'+ss+':'+cc 
    }, 
    evento: function(e){ 
    console.log(e); 
    } 
}); 

Aber wie ich mit Socket.io gerade arbeite, muss ich auf sie zuzugreifen Javascript Vanille verwenden, zum Beispiel:

<script> 
Polymer({ 
    is: 'LaserLand-Cronometro', 
    properties: { 
    jugadores: Object, 
    minuto: Number, 
    segundo: Number, 
    centesima: Number, 
    hora:{ 
     type: String, 
     value: '00:00:00' 
    }, 
    task: Number 
    }, 
    cronometro: function(){ 
    this.centesima++ 
    if(centesima>99){ 
     this.centesima=0 
     this.segundo++ 
    }else if(segundo > 59){ 
     this.segundo=0 
     this.minuto++ 
    } 
    let mm; 
    let ss; 
    let cc; 
    if(this.centesima<9){cc='0'+this.centesima} 
    if(this.segundo<9){ss='0'+this.centesima} 
    if(this.minuto<9){mm='0'+this.minuto} 
    this.hora=mm+':'+ss+':'+cc 
    }, 
    evento: function(e){ 
    console.log(e); 
    } 
}); 
var socket = io('http://localhost:7000',{'forceNew': true}); 
var time; 
socket.on('inicio', function(data){ 
    time = setInterval(cronometro, 100); 
}); 

ich habe bereits versucht verschiedene Möglichkeiten, das zu tun, aber keiner geht, also ich brauche deine Hilfe. Mit anderen Worten, gibt es eine Möglichkeit, die Funktionen in Polymer direkt aus Javascript deklariert zugreifen?

Antwort

3

Sie können diese Methode nicht aufrufen, da noch keine Instanz erstellt wurde!

Es scheint von Ihrem Code, dass Sie ein benutzerdefiniertes Element namens "LaserLand-Cronometro" definiert haben. Ihre Methode cronometro ist nur innerhalb einer Instanz dieses benutzerdefinierten Elements verfügbar. Sie müssen also erst eine Instanz des benutzerdefinierten Elements erstellen/abrufen und dann seine Methode aufrufen.

Sie müssen Socket.io in das Polymer registration life cycle aufnehmen oder selbst eine Instanz erstellen.

.... 
var laserLand = document.createElement('LaserLand-Cronometro'); 

var socket = io('http://localhost:7000',{'forceNew': true}); 
var time; 
socket.on('inicio', function(data){ 
    time = setInterval(laserLand.cronometro, 100); 
}); 

Ich könnte darauf hindeuten, ein benutzerdefiniertes-Element zu erstellen, die Ihre Back-End-Verbindung über socket.io wickelt und bieten eine API, die Daten in Ihr Polymer App zu binden. Vielleicht die firebase elements Inspiration geben.

Hoffe, das hilft.

Verwandte Themen