谷歌+环聊存储状态下的价值gapi.hangouts.data
问题描述:
我现在陷入了一段时间的轻微问题:需要在状态中存储一个随机数,这将持续到所有参与者。谷歌+环聊存储状态下的价值gapi.hangouts.data
alert(delta[random]);
返回值,因此一切都有望成为确定这一点。然而这就是神秘的开始:
我已经尝试过
$.each(gapi.hangout.data.getKeys(),function(i,o){
alert(o);
});
,但它永远不会进入循环。但如果我放置
alert('dfsdasd');
后submitDelta它的作品。 最后两行
alert(gapi.hangout.data.getValue(random));
$("#randomNumber").val(gapi.hangout.data.getValue(random));
是死的,与 '未定义' 或[对象]没有警报。
function setRandom()
{
var rand = Math.floor(Math.random()*100);
var random = "randomNumber";
var delta = {};
delta[random] = JSON.stringify(rand);
alert(delta[random]);
gapi.hangout.data.submitDelta(delta);
alert(gapi.hangout.data.getValue(random));
$("#randomNumber").val(gapi.hangout.data.getValue(random));
}
我已经包括 两个库 SRC = “// talkgadget.google.com/hangouts/_/api/hangout.js?v=1.1” 和src =“HTTP://代码。 jquery.com/jquery-1.7.2.js”
上onStateChanged
没有处理我究竟做错了什么? 随时我碰touchi.hangouts.data它失败。
答
看来我在这里看到有两个问题。
第一个是submitDelta被定义为带两个参数,并且只提供一个参数。
另一个问题是submitDelta()是异步的,所以你不应该期望getValue()或getState()在它被调用后立即工作。在这种情况下处理事件的最佳方式是使用onStateChanged.add()注册StateChangedEvent。
因此,举例来说,你可以做这样的事情:
function init(){
gapi.hangout.data.onStateChanged.add(handleChange);
submitRandom();
}
function handleChange(stateChangedEvent){
var random = "randomNumber";
var val = gapi.hangout.data.getValue(random);
alert(val);
$("#randomNumber").val(val);
}
function submitRandom(){
var rand = Math.floor(Math.random()*100);
var random = "randomNumber";
var delta = {};
delta[random] = JSON.stringify(rand);
alert(delta[random]);
gapi.hangout.data.submitDelta(delta, []);
}
非常感谢主席先生,你改变了战潮!问题是gapi.hangout.data.submitDelta(delta,[]);不传递额外的数组,不知何故,我认为这是可选的。 – 2012-07-08 15:27:34