var viewer; // 类型:opensocial.Person var viewerFriends; // 类型:opensocial.Collection var viewerBooks; // 类型:{'books': json} var bookList = ['西游记', '三国演义', '水浒传', '红楼梦']; /* 可点击的书名 */ function bookHTML(book) { return "
  • " + "" + book + "
  • "; }; /* 显示书架里的书名 */ function showAvailableBooks() { var html = new Array(); var len = bookList.length; for (var i = 0; i < len; ++i) { html.push(bookHTML(bookList[i])); } document.getElementById('allBooks').innerHTML = html.join(''); }; /* 显示自己已读过的书 */ function showViewerBooks() { /* 解析当前数据 */ var json = viewerBooks['books']; var books; try { books = gadgets.json.parse(gadgets.util.unescapeString(json)) || []; } catch(e) { books = []; } /* 显示书名 */ var html = new Array(); var len = books.length; for (var i = 0; i < len; ++i) { html.push("
  • " + books[i] + "
  • "); } document.getElementById('viewerBooks').innerHTML = html.join(''); }; /* 处理书名点击响应 */ function onReadBook(book) { /* 解析当前数据 */ var json = viewerBooks['books']; var books; try { books = gadgets.json.parse(gadgets.util.unescapeString(json)) || []; } catch(e) { books = []; } /* 检查是否已经读过 */ var len = books.length; for (var i = 0; i < len; ++i) { if (book == books[i]) { alert("我已经读过" + book + "了"); return; } } /* 串行化新的数据 */ books.push(book); json = gadgets.json.stringify(books); /* 发送更新数据请求 */ var req = opensocial.newDataRequest(); req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'books', json)); req.send(function(dataResponse) { alert("我读了" + book); /* 更新后刷新所有数据 */ reloadAll(); }); }; /* 显示基本信息 */ function showBasic() { /* 显示 VIEWER 名字 */ document.getElementById('me').innerHTML = viewer.getDisplayName(); /* 显示 VIEWER 的朋友名字 */ var html = new Array(); viewerFriends.each(function(friend) { html.push(friend.getDisplayName() + ", "); }); document.getElementById('friends').innerHTML = html.join(''); }; /* 发送 Opensocial API 请求 */ function reloadAll() { var req = new opensocial.DataRequest(); req.add(req.newFetchPersonRequest('VIEWER'), 'v'); req.add(req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'vf'); req.add(req.newFetchPersonAppDataRequest('VIEWER', 'books'), 'vd'); req.send(onReloadAll); }; /* 处理 Opensocial API 响应 */ function onReloadAll(dataResponse) { /* 获取数据 */ viewer = dataResponse.get('v').getData() || {}; viewerFriends = dataResponse.get('vf').getData() || {}; viewerBooks = dataResponse.get('vd').getData()[viewer.getId()] || {}; // {'books':[]} /* 显示数据 */ showBasic(); showAvailableBooks(); showViewerBooks(); }; /* 处理清空按钮响应 */ function onClearBooks() { var req = opensocial.newDataRequest(); req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'books', null)); req.send(function(dataResponse) { alert("清空了"); /* 更新后刷新所有数据 */ reloadAll(); }); } /* Gadget 执行入口 */ function init() { reloadAll(); }; gadgets.util.registerOnLoadHandler(init);
    我:

    我的朋友:

    我读过的书: [清空]
      书架:
        ]]>