OpenSocial :使用持久化数据

OpenSocial API 支持保存和检索每个用户和每个应用程序的数据。在 OpenSocial v0.5 和 v0.6 中,也支持每个应用程序实例和全局应用程序数据,但是在 v0.7 中删除了。

该代码段显示了将数据保存到共享存储中的方式:

function populateMyAppData() {
  var req = opensocial.newDataRequest();
  var data1 = Math.random() * 5;
  var data2 = Math.random() * 100;
  var data3 = new Date().getTime();
 
  req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField1", data1));
  req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField2", data2));
  req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField3", data3));
  req.send(handlePopulateMyAppData);
};
可以按以下方式检索存储在以上代码段中的数据:

var req = opensocial.newDataRequest();
//Request the following three app fields
var fields = [ "AppField1", "AppField2", "AppField3" ];
req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewer_data");
req.send(handleRequestMyData);以下是应用程序的完整代码。它将为查看者设置一些值,然后对其进行检索:

<?xml version="1.0" encoding="UTF-8" ?>

 
   
 
 
 

 
   gadgets.util.registerOnLoadHandler(populateMyAppData);
   var htmlout = "";
   var me = null;

   /************************************************************************
    * Set user data
    */
   function populateMyAppData() {
     var req = opensocial.newDataRequest();
     var data1 = Math.random() * 5;
     var data2 = Math.random() * 100;
     var data3 = new Date().getTime();
     htmlout += "Setting AppField1 to " + data1 + "
";
     req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField1", data1)) + "
";
     htmlout += "Setting AppField2 to " + data2 + "
";
     req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField2", data2)) + "
";
     htmlout += "Setting AppField3 to " + data3 + "
";
     req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField3", data3)) + "
";
     req.send(handlePopulateMyAppData, "update_appdata");
   }

   /************************************************************************
    * Handle responses from update person app data requests
    */
   function handlePopulateMyAppData(data) {
     if (data.hadError()) {
       htmlout += data.getError();
     }
     requestMyData();
   }
  
   /************************************************************************
    * Fetch app data
    */
   function requestMyData() {
     var req = opensocial.newDataRequest();
     var fields = [ "AppField1", "AppField2", "AppField3" ];
     req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), "viewer");
     req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewer_data");
     req.send(handleRequestMyData);
   }

   /************************************************************************
    * Handle responses from app data requests
    */
   function handleRequestMyData(data) {
     var mydata = data.get("viewer_data");
     var viewer = data.get("viewer");
     me = viewer.getData();

     if (mydata.hadError()) {
       htmlout += data.getError();
       return;
     }
     // Do something with the returned data - note the getData call
     doSomethingWithMyData(mydata.getData());
   }

   /************************************************************************
   * Operate on user data
   */
   function doSomethingWithMyData(data) {
     //Data is indexed by user id, and represents an object where keys
     //correspond with the app data fields.
     var mydata = data[me.getId()];
     var div = document.getElementById('content_div');
     htmlout += "My AppField1 data is: " + mydata["AppField1"] + "
";
     htmlout += "My AppField2 data is: " + mydata["AppField2"] + "
";
     htmlout += "My AppField3 data is: " + mydata["AppField3"] + "
";
     div.innerHTML = htmlout;
   }
  
 
 


  ]]>
 
注意:存储在 OpenSocial 应用程序中的数据始终是字符串。大多数用途是,使其成为 JSON 编码字符串。因为 OpenSocial 执行自动 HTML(对所有包括应用程序数据的返回数据进行编码),所以必须在解析它们之前对应用程序数据存储中字符串化的 JSON 对象进行解码。例如:

var unescapedString = gadgets.util.unescapeString(jsondata);
var bj = gadgets.json.parse(unescapedString);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14734354/viewspace-432969/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14734354/viewspace-432969/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值