Pepper: передать переменную из Python в веб-JS и отобразить ее в HTML

Я хочу передать данные из моей хореографии в webjs, и переданное значение отобразит их в html через javascipt. Я могу успешно пройти его, но проблема в том, что он будет отображаться только в течение 1-3 секунд. Я сделал это правильно?

Вот мой код из choregraphe (python):

def onLoad(self):
    #put initialization code here
    pass

def onUnload(self):
    self.memory = None
    #put clean-up code here
    pass

def onInput_onStart(self):
    data = ['apple','mango','juice']
    self.memory.raiseEvent("myData", data)

def onInput_onStop(self):
    self.onUnload() 
box is stopped
    self.onStopped() 

И это код моего javaschipt для получения данных из перца:

var  session = new QiSession();

$(document).ready(function(){
getData();
});
function getData(){
session.service('ALMemory').then(function(ALMemory){
  ALMemory.subscriber("myData").then(function(subscriber) {
    subscriber.signal.connect(function(data){
    "display to html here"
    });
    });
});
}

person jay desierto    schedule 03.01.2019    source источник
comment
попробуйте if (data) {отобразить в HTML здесь}   -  person TVK    schedule 10.01.2019


Ответы (2)


Ваш код Choregraphe полон ошибок и бесполезных шаблонных вещей, которые вы можете просто удалить, этого должно быть достаточно:

def onLoad(self):
    self.memory = self.session().service("ALMemory")

def onInput_onStart(self):
    data = ['apple','mango','juice']
    self.memory.raiseEvent("myData", data)

... что касается стороны javascript, нужно сделать две вещи:

  • Как только страница загрузится, покажите текущее значение данных - это делает код TVK
  • Как только значение изменится, обновите страницу - это сделает ваш код.

В совокупности это будет примерно так:

var session = new QiSession();
function updateDisplay(data) {
    "display to html here"
}
session.service('ALMemory').then(function(ALMemory){
  ALMemory.getData("myData").then(updateDisplay);
  ALMemory.subscriber("myData").then(function(subscriber) {
        subscriber.signal.connect(updateDisplay);
  });
});
person Emile    schedule 08.01.2019

Попробуйте работать с ALMemory.getData, а не с ALMemory.subscriber. Это может сработать для вас:

var  session = new QiSession();

$(document).ready(function(){
getData();
});
function getData(){
session.service('ALMemory').then(function(ALMemory){
  ALMemory.getData("myData").then(function(data) {
    "display to html here"
    });
});
}
person TVK    schedule 03.01.2019