2017-01-25 9 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, мне нужно, чтобы получить доступ к ним с помощью яваскрипта ванили, например:

<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 будет доступен только в экземпляре этого настраиваемого элемента. Итак, все, что вам нужно сделать, это сначала создать/получить экземпляр пользовательского элемента, а затем вызвать его метод.

Вы должны включить Socket.io в Polymer registration life cycle или создать экземпляр самостоятельно.

.... 
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 дать вдохновение.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^