上面几个小节讲解了使用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. 《剑指offer》第四十一题(数据流中的中位数)

    // 面试题41:数据流中的中位数 // 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么 // 中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值, // ...

  2. 学习笔记45—Linux压缩集

    1.压缩功能 安装 sudo apt-get install rar 卸载 sudo apt-get remove rar 2.解压功能 安装 sudo apt-get install unrar 卸 ...

  3. css的table布局

    1.table中对tr设置margin-top是没有作用的.

  4. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  5. Shell脚本字体颜色

    [root@web01 scripts]# man console_codesecho -e "\033[背景颜色:字体颜色m字符串\033[0m",例:echo -e " ...

  6. LeetCode--155--最小栈(java版)

    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- 获取栈顶元素. ...

  7. 基于Lua语言的触动精灵脚本开发

    工具下载 官网地址 连接模拟器 studio连接 首先要先下载ADB模拟器连接IDE,注意,这里一定要用官网提供的ADB,安卓开发的adb不行!!! 下载好之后,打开studio,输入Access K ...

  8. Fiddler抓取https数据包

    Wireshark和Fiddler的优缺点: ①Wireshark是一种在网络层上工作的抓包工具,不仅自带大量的协议分析器,而且可以通过编写Wireshark插件来识别自定义的协议.虽然Wiresha ...

  9. pycharm安装步骤

    python环境配置教程 https://jingyan.baidu.com/article/c45ad29c05c208051653e270.html 由于安装Pycharm时忘记截图了,所以详细安 ...

  10. 关于react16.4——转发refs和片段Fragment

    1.转发refs Ref 转发是一种自动将 ref 通过组件传递给子组件的技术. 一些组件倾向于以与常规 DOM button 和 input 类似的方式在整个应用程序中使用, 并且访问他们的 DOM ...