ITPub博客

首页 > Linux操作系统 > Linux操作系统 > OpenSocial :使用持久化数据

OpenSocial :使用持久化数据

原创 Linux操作系统 作者:Google-fans 时间:2008-08-22 11:58:52 0 删除 编辑

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);以下是应用程序的完整代码。它将为查看者设置一些值,然后对其进行检索:



 
   
 

 
 

 
   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博客 ” ,链接:https://blog.itpub.net/14734354/viewspace-432969/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-08

  • 博文量
    140
  • 访问量
    230930