开发人员应用程序案例研究:数珠

概述

 

 

“数珠珠”是一个针对儿童互动、有趣而含教育意义的应用程序。 它用来教小孩做 50 以内的计数,还有能帮助他们辨别颜色。 

 

游戏开始时显示主屏幕,在该处可以直接启动游戏或了解游戏玩法。 游戏屏幕有 5 根杆子,每根上面有 10 个果形珠子。 会随机生成三个问题,而儿童则需要移动相应数目的水果珠子。 如果答案是正确的,游戏便显示积极的短语以强化儿童的自信心。 如果所有三个答案都是正确的,游戏便在 7 秒钟以后过渡到"做得好"屏幕,让孩子可以再看一遍自己的答案,或重新开始。

 

 

  

目录

 

 

  

功能

从 web 应用程序开发人员的角度来看,令人感兴趣的特点是:

  • 使用 Chromium API 的国际化
  • 使用 JSON 文件存储本地化字符串。
  • 使用 JS 原型和类。
  • 在 CSS 内和从 java 脚本使用 CSS 选择器
  • 动态创建和操纵 DOM 元素。
  • 使用 .animate()、.delay()、.fadeIn()、fadeOut() 和 .queue()/.dequeue() 等 JQuery 动画

 

 

  

国际化

要国际化,所有用户可见的字符串都必须放在一个名为 messages.json 的文件中(位于名为 _locales/LocaleCode 的目录中;LocaleCode 是代表代码,如以 en 代表英语)。 配置文件、CSS 文件和 JavaScript 代码使用的每个字符串的名称来获取其本地化的版本。

若要检索语言环境,web 应用程序需要调用 chrome.i18n.getMessage() 方法。 在此示例中,js/CountingBeads.js 文件提供了 getTranslation 函数来检索语言环境。

你可在阅读更多中了解关于国际化的更多信息。

function localizeStrings()
{
	$("#title").text(chrome.i18n.getMessage("ipTitle"));
	$("#startBtn").text(chrome.i18n.getMessage("ipStart"));
	$("#howToBtn").text(chrome.i18n.getMessage("ipHowTo"));

	$("#gpRestart").text(chrome.i18n.getMessage("startOver"));

	$("#htpQuest1Msg").text(chrome.i18n.getMessage("htpHowManyBeads"));
	$("#moveMsg").text(chrome.i18n.getMessage("htpMoveBeads"));
	$("#countMsg").text(chrome.i18n.getMessage("htpCountBeads"));
	$("#cupFillMsg").text(chrome.i18n.getMessage("htpCupFill"));
	$("#htpRestart").text(chrome.i18n.getMessage("startOver"));

	$("#slideMsg").text(chrome.i18n.getMessage("fpSlideText"));
	$("#finishMsg").text(chrome.i18n.getMessage("fpGoodJob"));
	$("#newBtn").text(chrome.i18n.getMessage("fpNew"));	

	gpMsg.push(chrome.i18n.getMessage("gpYouDidIt"));
	gpMsg.push(chrome.i18n.getMessage("gpGoldStar"));
	gpMsg.push(chrome.i18n.getMessage("gpWayToGo"));
	gpMsg.push(chrome.i18n.getMessage("gpKeepCounting"));
	gpMsg.push(chrome.i18n.getMessage("gpAwesomeJob"));
}

 

 

  

JS 原型

在 JavaScript 中的每个对象都有一个名为 __proto__ 的隐藏属性。 此属性在定义或实例化时添加到对象中。 基于 __proto__ 属性访问原型链。 由于并不是所有的浏览器都支持此属性,直接访问 __proto__ 属性并不安全。

在一般情况下,设置对象的原型只能在创建对象的过程中进行:如果您通过 new SettingsBackend()创建新对象,该对象的原型属性将被设为 SettingsBackend.prototype 所引用的对象。

此示例使用 prototype 属性向对象添加方法。

你可在阅读更多中了解关于原型的更多信息。

 

 

  

动态创建 DOM 元素。

在某些情况下,您可能需要动态地对 DOM 对象进行更改。 您可以通过使用 Javascript 或 jQuery 完成此项操作。 若要将新元素添加到文档,您需要按照以下步骤操作:

  • 创建一个您想要添加的节点或元素。
  • 选择要将其附加在文档中的位置。
  • 将该节点添加到文档中。

您可以使用文档对象的 createTextNode() 方法创建文本节点。 document.createTextNode('Text') 返回一个含给定文本的节点。 若要创建新的标记,可以使用 createElement() 方法;该方法有一个 setAttribute() 方法,以将属性添加到已创建的标记。

一旦创建了想要添加的节点,你必须在文档树中找到你想要添加该节点的位置。 您可以通过两种方式查找其位置:

  • 通过使用儿童和家长关系浏览文档树。 使用 document.childNodesdocument.nextSiblingdocument.parentNode 方法来遍历文档树。
  • 使用 document.getElementById("ID") 方法基于 ID 来查找节点。

在确定目标位置后, 使用 appendChild() insertBefore() 方法添加节点。

var elem = document.getElementById(prefix+"Bar"+i);
为 (var idx = 0 ; idx < beadCount ; idx + +) {
	var child = document.createElement("div");
	child.style.height = fruits[(i)].height+"px";
	child.style.width = fruits[(i)].width+"px";
	child.style.top = "0px";
	child.style.left = ((idx)*fruits[(i)].width)+"px";
	child.style.backgroundImage = fruits[(i)].image;
	child.style.display = "block";
	child.style.position = "absolute";
	child.dataset.x = (i);
	child.dataset.y = (idx);
	if(fromPage == gamePage) {
		child.addEventListener("click", handleBeadClick, false);
		child.style.cursor = "pointer";
	}
	elem.appendChild(child);
}

var elem = document.getElementById("gpBar"+idx);
var children = $(elem).children();

 

 

  

使用 JSON 文件

JSON 是一种轻量级的数据交换格式。 它可以通过以下一些为 C 系列语言程序员所熟知的简单规范编写。 JSON 独立于语言,便于人们阅读和编写。 在 JSON 中使用的主要概念是键/值对和排序列表的集合。

此示例使用 JSON 文件来保存本地化字符串并定义 web 应用程序的manifest文件

你可在阅读更多中了解关于 JSON 的更多信息。

//example manifest file。
{
    "app": {
        "launch": {
            "container": "panel",
	    "width":1024,
	    "height":600,
            "local_path": "index.html"
        }
    },
    "default_locale": "en_US",
    "description": "帮助儿童学习计数的水果应用程序",
    "icons": {
        "128": "icon_128.png",
        "48": "icon_48.png",
        "16": "icon_16.png"
    },
    "key": "MIGfMA0GCSqGS..",
    "name": "数珠珠",
    "version": "0.1.3",
    "homepage_url" : "https://01.org/webapps/content/counting-beads",
    "update_url" : "https://01.org/webapps/content/counting-beads/update.xml"
}

 

 

  

屏幕截图

下面是数珠珠应用程序的屏幕截图。

 

 

   

主页面

 

图-1: 这是加载应用程序时的外观。  

 

 

   

Tizen 开发设备计划是帮助应用程序开发人员获得能用于 Tizen 任务的开发硬件的一种方法。开发设备将分发给最合格的开发者,作为交换条件,开发者承诺将积极推进 Tizen 应用生态系统的状态。 请参阅 开发设备计划 页了解关于选择标准的详细信息以及关于申请方法的说明。 如果您是一家制造商,并有兴趣通过本计划提供开发或生产硬件,请联系 Brian Warner 。

 

{%!=cb02732a-f804-4cdb-af93-97e098ac983f=!%}  

 

 

   

游戏网页

 

{%!=667aab4a-3e8a-4854-a4b7-1638ef9c68da=!%}  

 

 

   

“做得好”页面

 

{%!=a110c35c-170f-4221-be2c-d23c9d06817f=!%}