2012-07-08 56 views
1

我现在陷入了一段时间的轻微问题:需要在状态中存储一个随机数,这将持续到所有参与者。谷歌+环聊存储状态下的价值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它失败。

回答

1

看来我在这里看到有两个问题。

第一个是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, []); 
} 
+0

非常感谢主席先生,你改变了战潮!问题是gapi.hangout.data.submitDelta(delta,[]);不传递额外的数组,不知何故,我认为这是可选的。 – 2012-07-08 15:27:34