上面几个小节讲解了使用HTML5和JavaScript语言开发Windows 应用商店应用时会用到的一些技术,本小节将前面介绍的知识融合在一起创建一个菜谱应用程序,帮助读者更进一步地理解和掌握这些知识。

此菜谱应用程序主要的功能是介绍一些菜肴和主食的做法,其中包含三个页面:第一个页面为主页面,用于按类别显示一些菜肴和主食;第二个页面为分类页面,显示某个类别的信息和属于该类别的菜肴或主食;第三个页面为菜肴页面,显示某项菜肴或主食的详细信息,如名称、图片和具体做法。这三个页面可以相互跳转,例如,在主页面中单击某个类别的名称时,就会跳转到分类页面;在主页面中或分类页面中单击某项菜肴时,就会跳转到该菜肴的详细信息页面。

根据页面划分,这里把该应用程序分成了三个部分来介绍,先是主页面的创建,然后是分类页面的创建,最后是菜肴页面。

首先在Visual Studio 2012中新建一个JavaScript的Windows应用商店的空白应用程序项目,并命名为MenuApplication。然后在images文件夹里添加三个新建文件夹,并分别命名为"fenlei" 、

"shucai" 、"roulei",接着向三个文件夹里添加所需要的图片。接下来在js文件夹里新建一个JavaScript文件,将其命名为menuData。打开menuData.js文件,定义数据源和与操作数据源相关的一些函数,相关代码如下所示:

(function () {

"use strict";

//定义菜肴的类别

var sampleGroups = [

{ key: "shucai", title: "蔬菜类:", backgroundImage: "images/fenlei/shucai.jpg", description: "蔬菜中有许多维生素..." },

{ key: "roulei", title: "肉类:", backgroundImage: "images/fenlei/roulei.jpg", description: "肉里含有许多人体必需氨基酸,肉的蛋白质很丰富,另外吃肉可以延长人的饥饿感" },

];

//定义各种菜肴,同时设置所属的类别

var sampleItems = [

{ group: sampleGroups[0], title: "拌黄瓜", description: "碧绿色,脆嫩,清香,鲜咸", content: "1. 金针菇切去头部。。。。", backgroundImage: "images/shucai/banhuanggua.jpg" },

{ group: sampleGroups[0], title: "红烧冬瓜", description: "味鲜咸,色泽红亮,冬瓜软烂,香鲜味美", content: "1. 冬瓜去皮去瓤。。。。", backgroundImage: "images/shucai/hongshaodonggua.jpg" },

{ group: sampleGroups[0], title: "蒜香茄子", description: "蒜香浓郁,咸鲜可口,高血压的食疗佳品", content: "1. 准备食材,长茄子两个。。。。", backgroundImage: "images/shucai/suanxiangqiezi.jpg" },

厘米大小的块儿。。。。", backgroundImage: "images/roulei/hongshaorou.jpg" },

{ group: sampleGroups[1], title: "红烧排骨", description: "红烧排骨传统川菜。此菜味道香咸,排骨酥烂,色泽金红。", content: "1. 锅内烧开水,放入斩件排骨。。。。 ", backgroundImage: "images/roulei/hongshaopaigu.jpg" },

{ group: sampleGroups[1], title: "回锅肉", description: "回锅肉是中国川菜中一种烹调猪肉的传统菜式,川西地区还称之为熬锅肉。", content: "1. 连皮猪肉。。。。", backgroundImage: "images/roulei/huiguorou.jpg" },

];

//创建一个List对象

var list = new WinJS.Binding.List();

//遍历数据源,并将菜肴添加到相应的分组中

sampleItems.forEach(function (item) {

list.push(item);

});

//使用key和group属性值来分组

var groupedItems = list.createGrouped(

function groupKeySelector(item) { return item.group.key; },

function groupDataSelector(item) { return item.group; }

);

//返回包含指定分类的菜肴项的List

function getItemsFromGroup(group) {

return list.createFiltered(function (item) { return item.group.key === group.key; });

}

//通过菜肴分类的key值获取某一分类

function resolveGroupReference(key) {

for (var i = 0; i < groupedItems.groups.length; i++) {

if (groupedItems.groups.getAt(i).key === key) {

return groupedItems.groups.getAt(i);

}

}

}

// 获取菜肴的标识

function getItemReference(item) {

return [item.group.key, item.title];

}

//通过菜肴的标识获取相应的某项菜肴

function resolveItemReference(reference) {

for (var i = 0; i < groupedItems.length; i++) {

var item = groupedItems.getAt(i);

if (item.group.key === reference[0] && item.title === reference[1]) {

return item;

}

}

}

WinJS.Namespace.define("menuData", {

items: groupedItems,

groups: groupedItems.groups,

getItemsFromGroup: getItemsFromGroup,

getItemReference: getItemReference,

resolveGroupReference: resolveGroupReference,

resolveItemReference: resolveItemReference

});

})();

在上面的代码中,首先定义一个匿名函数,在这个匿名函数中,初始化了两个数组类型的数据集合sampleGroups和sampleItems,其中sampleGroups数据集合包含菜肴的类别信息,sampleItems数据集合包含各种菜肴的信息,在这里只列出了部分类别和菜肴。然后调用WinJS.Binding.List构造函数定义一个名为list的对象,并使用forEach函数指定sampleItems数据集合中的每一个数据对象调用一个匿名函数,在这个匿名函数中调用push函数将sampleItems数据集合中的每条菜肴信息添加到list对象中。接下来使用list对象的createGrouped函数对list对象中的每条菜肴信息进行分类,并将分类后的菜肴信息保存到groupedItems对象中。createGrouped函数有两个函数类型的参数groupKeySelector和groupDataSelector,其中groupKeySelector函数返回菜肴类别标识key, groupDataSelector函数返回菜肴的group属性值。

接着定义getItemsFromGroup函数,该函数会根据参数group,调用list对象的createFiltered函数来获得一个类别中的所有菜肴。然后定义resolveGroupReference函数,在函数中遍历groups列表中的所有菜肴类别,如果菜肴类别的标识key与参数key相同,就返回这个菜肴类别。接下来定义getItemReference函数,根据参数item,返回item.group.key和item.title两个属性作为菜肴的标识。继续定义resolveItemReference函数,在函数中首先遍历所有的菜肴,如果某项菜肴所在类别的标识与参数reference数组的第一个元素相同,并且菜肴的名称与reference数组的第二个元素相同,就返回这项菜肴。最后定义一个名为"menuData"的命名空间,将程序所要使用的数据和上面定义的这些函数添加到该命名空间内,这样在其他文件中就可以通过命名空间引用它们。

需要注意的是,本示例中通过key属性来标识一个菜肴类别,通过类别的key属性和菜肴的title属性来标识一项菜肴。在完成定义数据源和与数据源操作相关的一些函数之后,接下来分别实现上上面提到的三个页面,先来看主页面。

Win10系列:JavaScript综合实例1的更多相关文章

  1. Win10系列:JavaScript综合实例2

    在项目中添加一个名为pages的文件夹,并在pages文件夹里面再添加一个名为mainPage的文件夹,接着在mainPage文件夹里添加一个"页面控制"项,命名为mainPage ...

  2. Win10系列:JavaScript综合实例4

    实现主页面和分类页面的之后,最后来看一下菜肴页面的实现,这个页面用于详细介绍某项菜肴或主食,如名称.图片和具体做法等.在pages文件夹里面添加一个名为foodDetail的文件夹,并在foodDet ...

  3. Win10系列:JavaScript综合实例3

    实现主页面的功能之后,接下来实现分类页面.分类页面中显示一种菜肴类别的详细信息,包括类别名称.图片.描述信息以及属于该类别的一些菜肴.在pages文件夹中添加一个名为classDetail的文件夹,并 ...

  4. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    一步一步学Silverlight 2系列(18):综合实例之RSS阅读器   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支 ...

  5. html5--5-16 综合实例绘制饼图

    html5--5-16 综合实例绘制饼图 实例 <!doctype html> <html> <head> <meta charset="utf-8 ...

  6. Qt Quick综合实例之文件查看器

    假设你基于Qt SDK 5.3.1来创建一个Qt Quick App项目,项目模板为你准备的main.qml文档的根元素是ApplicationWindow或Window.这次我们就以Applicat ...

  7. ReportingServies——SQLServer报表开发综合实例

    如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具 不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中 ...

  8. Loadrunner 关联 web_custom_request综合实例

    Loadrunner 关联 web_custom_request综合实例 Loadrunner 关联web_custom_request,针对自带的订票系统的一个综合实例,相信看了本文大家对学习loa ...

  9. 使用VS2012 开发SharePoint 2013 声明式的action(activity) 综合实例

    本文讲述使用VS2012 开发SharePoint 2013 声明式的action 综合实例. 需求同: http://blog.csdn.net/abrahamcheng/article/detai ...

随机推荐

  1. java正则常用记录

    1.   java中 字符串的某个字母是否有某个指定字符N  : for(int i=0;i<temp.length();i++){ if( temp.get(i).substring(0,1) ...

  2. docker下debian镜像开启ssh, 允许root用密码登录

    用的官方python镜像做开发, 暴露端口, 用pycharm ssh进去开发. 忽然发现本来ssh能连上, 但是更了新的python镜像连不上了. 有折腾了一下, 连上了. 主要是python官网镜 ...

  3. C++中的清屏函数

    system("cls") 执行控制台命令cls,功能是清屏,清楚所有屏幕显示信息

  4. Getting started with Processing 第六章总结

    平移,旋转和缩放 前言 在这一章节中,平移.旋转和缩放都是以原点为基准的.并且是通过控制坐标系原点的位置来达到图元平移,旋转.缩放的视觉效果.作者在文中的原话是:另一种在屏幕上改变位置和移动物体的技术 ...

  5. php oracle数据库clob和nclob字段

    php oracle数据库clob和nclob字段 nclob类型 1.nclob不能使用php的stream_get_contents来获取数据库的资源内容, 2.并且nclob只能使用to_cha ...

  6. ORM--Object Relational Mapping

    ORM 对象关系映射   Object Relational Mapping, 简称ORM,或O/RM,或O/R mapping 一种程序技术 用于实现面向对象编程语言里       不同类型系统   ...

  7. python记录day_20 多继承

    多继承 继承: x是一种y的时候.可以使用继承关系.是"is a"的关系 在python中,支持多继承,一个类可以拥有多个父类.但是多继承中, 存在着这样一个问题,当两个父类中出现 ...

  8. win10更新后,可以远程桌面ping也没问题,但是无法访问共享文件夹的解决方法

    计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters 1.在键盘输入WIN+R键, ...

  9. linux指令统计日志出现的次数

    cat  XXX.log|grep ''|grep '条件'| wc -l   单个条件统计 cat  XXX.log|grep ''|grep '条件1'|grep '条件2'|grep '条件3' ...

  10. 函数使用一:采购订单BAPI_PO_CREATE1

    REPORT YTEST01. DATA:GS_POHEADER TYPE BAPIMEPOHEADER, GS_POHEADERX TYPE BAPIMEPOHEADERX, GT_RETURN T ...