2017-01-25 75 views
0

對不起,造成了不便(我的英文不太好,我正在用翻譯來寫)。 我已經搜索了足夠的在StackOverFlow和其他網站看,我沒有找到我需要的答案。 我的工作與聚合物的一個項目,在我所宣稱的功能如下:從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); 
    } 
}); 

但正如我與Socket.io的工作,我需要使用javascript香草來訪問它們,例如:

<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); 
}); 

我已經嘗試過不同的方法來做到這一點,但沒有走,所以我需要你的幫助。 換句話說,有沒有辦法直接從javascript訪問聚合物中聲明的函數?

回答

3

您不能調用此方法,因爲尚未創建實例!

從您的代碼看來,您已經定義了一個名爲'LaserLand-Cronometro'的自定義元素。您的方法cronometro只會在此自定義元素的實例中可用。 所以你所要做的就是先創建/獲取一個自定義元素的實例,然後調用它的方法。

您必須在Polymer registration life cycle中包含Socket.io或自己創建一個實例。

.... 
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); 
}); 

我可能會建議,以創建自定義元素,通過包裝的socket.io後端連接,並提供了一個API,將數據綁定到你的應用聚合物。 也許firebase elements給一些啓發。

希望這會有所幫助。