「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

本文内容采用连载形式,每一次新的内容可能与之前的内容相关联,我通过标题中最后的数字用以区分文章的先后次序,以便于读者在阅读文章时了解整个项目的发展脉络。

作家管理系统之Web应用(四)
作家管理系统之Web应用(三)
作家管理系统之Web应用(二)
作家管理系统之Web应用(一)

前四篇文章介绍了作家管理系统的页面设计,我们从零开始,仅仅使用原生CSS实现了两栏页面的布局,左边栏展示了作者列表,右边栏展示了作者的详细信息,最后创建输入对话框完成作者信息输入页面。如果只是使用HTML和CSS创建漂亮的页面,而没有交互动作,那么这不能称之为一个Web应用,现在的项目中还缺少一项重要的功能:让页面与用户进行交互,这项工作是由Javascript语言通过操作DOMBOM实现的,本文将重点介绍如何使用Javascript语言进行交互。

数据展现功能

一个应用中最重要的元素就是数据,数据是整个应用的基础。其实在之前的四篇文章中,我们也有意地参考了数据在应用中的样子,即它都包含哪些内容,以及采用什么方式的布局才能更好地将其展现给用户等,围绕着数据信息设计出了对应的页面,所谓的页面交互无非就是:用户把数据给程序,程序对数据进行处理,之后再将数据展现给用户。

本项目中的数据主要为作者信息,比如姓名、地址、出生日期等,我们要将这些信息展现在页面上。但是,如果数据信息比较多、类型比较复杂时,应用在展现信息的时候就需要对这些数据进行有步骤、有条件、有重点地展示,这称为对数据的控制,这类控制信息也属于应用中数据的一部分,只是它不直接显示在界面上,而是控制哪些数据在什么时候展示在什么位置。下文我们将结合代码说明数据在页面展示中的重要性。

本例中所有的应用都存放于一个数据结构中,称之为context变量,它的初始状态为一个空对象{},表示整个应用运行时的上下文信息,其中,通过context.authors表示所有的作者信息,首先看一下需要展示的作者数据信息格式是什么样子的,如下图1所示

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图1

这个author对象包含了一个作者的所有信息,比如姓名、性别和日期等,作者对象的每一个属性对应的含义是什么呢?通过下表1列出具体含义

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

表1

应用初始化

数据初始化(initData)

本应用的数据初始化包括两部分内容:一部分内容是预构建一些作者信息,另一部分内容是初始化页面中的某些控件,比如获取控件对应的对象或添加控件的响应事件等。初始化数据使用的函数为initData,它的功能是构建4个作者的数据,如下图2所示:

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图2

图2中只展示了第一个作者的数据,隐藏了其它的三个作者的数据。初始化执行完成之后,用户可以通过context.authors数组访问当前页面中所有的作者信息,比如在创建新的作者时,可以向context.authors通过push方法添加作者数据;展示其中一个作者的信息时,可以通过下标的方式访问context.authors[1]。

UI初始化(initUi)

UI初始化工作可以分为以下几个部分:

1.初始化左侧栏控件;

2.初始化右侧栏控件;

3.初始化对话框控件;

4.使用数据初始化作者列表;

5.使用第一条数据初始化右侧栏作者信息;

定义一个应用整体初始化函数initUi,它在程序启动的时候就会自动执行,在这个初始化界面函数中再进行各子界面的初始化操作,图3中列出了initUi函数的定义:

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图3

图3中第412行代码调用了函数initLeftPanel,它执行的是左侧栏控件初始化工作;第413行代码调用了函数initRightPanel,它执行的工作是初始化右侧栏界面;第414行代码执行的是初始化对话框界面;第415行代码initListView函数是使用context.authors中的数据创建作者列表;第416行代码initDetailView函数使用context.authors中的第一个作者数据填充右侧栏详情页界面。

初始化左侧栏控件(initLeftPanel)

初始化左侧栏控件主要是获取左侧列表中列表元素,通过图4第371行代码得到.left-list类元素,并将其对应的对象设置为context.authorList,之后再访问左侧栏的时候,就可以通过对象context.authorList来访问。

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图4

这个含有.left-list类的元素在HTML中的定义如图5所示,在整个HTML页面中只有一个元素的class含有.left-list,所以,通过图4中第371行代码查询到的元素就是这个div元素。第372行代码为这个div元素添加了点击事件的处理器,我们将在后续进行详细介绍。

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图5

初始化右侧栏(initRightPanel)

右侧栏界面的初始化函数为initRightPanel,这个函数创建了右侧栏中每一个需要显示作者信息的控件变量,并将这些变量保存至应用上下文变量context中,如图6代码所示

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图6

图6第395-405行代码,通过使用id选择器(#id)获取对应的DOM对象,只有最后一个使用了局部变量createAuthorButton,其它的全部保存至context变量中,这样后续在其它函数中访问这些DOM元素时,通过context变量就可以访问对应的元素了,而无需再次调用查询函数。为什么在第405行代码中使用了一个局部变量呢?原因是:这个按钮对象只是添加了一个事件处理器,之后便不会再次使用这个createAuthorButton对象,无需将其保存至context变量中。第408行代码为按钮createAuthorButton添加了一个click事件,click事件处理的具体内容在右侧栏详情页章节中介绍。

初始化对话框(initDialog)

初始化对话框调用的函数是initDialog,它的主要功能也是获取DOM树中的元素,并将其存放至context中,图中第377行代码获取的是对话框对象,它与其它的HTML元素一样,都属于普通的HTML元素,本例中为一个div元素。之后的第378-387行代码,使用querySelector函数并指定对应的id值查询到对应的元素对象,并存放至context变量中,这些对象变量将会在更新详情时由其它函数通过context访问。最后的第389和390行代码分别设置了对话框按钮“确认”和“取消”的点击事件处理器,稍后,在右侧栏详情章节介绍。

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图7

初始化左侧栏(initListView)

初始化左侧栏是通过函数initListView来实现的,它的主要功能是使用context.authors中的数据构建作者列表,一条作者数据对应于一个列表视图。图8中initListView函数只是调用了createAuthorsList函数,此函数通过访问context.authors数组的map方法将每一个author对象转换为一个div元素,map函数调用完成后会生成一个类型为div元素的数组,最后通过遍历这个数组将每一个div追加到.left-list类元素中,完成整个列表的构建。

在图8中,执行将author数据转换为列表条目的函数为createAuthorUi,这个函数首先通过第434行代码创建一个div元素,第435行设置这个div的class的值为.item,即添加这个条目的样式,之后第440-445行设置这个div的内部元素,使用第442行代码设置作者的姓名,第443行代码设置作者的国籍,最后为了便于区分每一个作者的头像,我们使用了一个颜色数组,一共含有4个不同的颜色值,根据作者的id值生成不同的颜色值,并将这个颜色值设置为头像元素的背景色,代码第446和447完成了头像背景色的设置功能。

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图8

初始化右侧栏(initDetailView)

初始化右侧栏主要功能是将context.authors中的第一条数据显示在对应的DOM元素上,图9第420行代码从context.authors数组中取出第一个author对象,并将它传递给函数updateAuthorDetail,此函数分别在第435和436行代码处调用updatePhoto和updateGender两个函数,分别更新了详情页的头像颜色和性别信息。头像颜色值的设置使用了第426行代码中的backgroundColor属性,并按照这个作者的id值求余得到颜色数组的下标值。性别信息的显示是通过author对象的gender属性判断是否为‘man’,如果是的话,显示为“男”,否则显示为“女”;代码第437-443行根据author对象的属性设置对应的元素的innerHTML内容,这些context的对象成员都是通过图6中的代码初始化完成的,在这里,使用了第一个作者的信息对其依次进行了赋值。

「项目实战」.作家管理系统之Web应用(五)(欲开发一个基于web的书籍销售系统)

图9

至此,这个界面的初始化工作就已经完成了,我们再来总结一下整个初始化流程是如何进行的。首先是构造4个作者的数据,完成数据初始化;第二步是获取DOM树中的元素,将其保存到上下文中,以便后续使用;第三步是使用作者列表数据构建左侧栏列表,使用作者数组中的第一条数据初始化右侧栏中的详情数据,这就是整个初始化所作的工作。

初始化完成之后,我们就可以添加各个控件的事件处理逻辑,比如通过点击按钮弹出一个对话框,通过“确定”按钮生成一个新的作者条目等,这些内容都在下一篇文章中进行介绍,谢谢各位的阅读 ,我们下一篇文章见!

作家管理系统之Web应用(四)
作家管理系统之Web应用(三)
作家管理系统之Web应用(二)
作家管理系统之Web应用(一)

本文为《作者管理系统之Web应用》的第五篇文章,其它的内容可以查看之前或之后的文章,您的反馈是对我最大的鼓舞,谢谢大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年7月5日 上午10:48
下一篇 2022年7月5日 上午10:50

相关推荐

  • 湖南项目管理系统erp

    湖南项目管理系统ERP:提升项目管理效率的利器 湖南项目管理系统ERP是一款功能强大、易于使用的软件,可以帮助企业提高项目管理效率,降低管理成本,提升企业竞争力。 湖南项目管理系统…

    科研百科 2024年12月24日
    0
  • 项目管理sop模版

    项目管理Sop模板 项目管理是一种组织管理技能,它涉及到规划、执行和控制项目进度、质量和成本。在项目执行过程中,项目管理需要遵循一系列的标准化流程,以确保项目能够按时、按质量完成。…

    科研百科 4天前
    0
  • 辅导员科研项目 辅导员科研项目有哪些

    辅导员科研项目有哪些 作为一名辅导员,我们经常需要参与科研项目,这些项目有助于我们提升自己的专业能力和学术研究水平,同时也可以帮助学生更好地了解和适应大学生活。本文将介绍一些常见的…

    科研百科 2024年7月30日
    121
  • 重点承接央企科技成果转化 保定创建区域产业联动发展新模式(保定承接北京产业转移)

    来源:长城网 本报讯(记者王日成 通讯员辛健伟)2020年,是京津冀协同发展达成中期目标的收官之年,保定市将继续加强与北京和雄安新区的沟通对接,扎实做好承接北京非首都功能疏解和服务…

    科研百科 2022年7月8日
    276
  • tms项目管理系统

    TMMS项目管理系统:让项目管理更高效 随着现代企业的快速发展,项目管理已经成为了一项必不可少的技能。TMMS项目管理系统是一种高效、便捷的项目管理工具,可以帮助企业更好地管理项目…

    科研百科 2024年5月24日
    128
  • 社区全面从严治党存在的问题

    社区全面从严治党存在的问题 近年来,随着全面从严治党的深入推进,社区治理质量得到了显著提升,但仍然存在一些问题。其中,全面从严治党在社区管理中存在的问题最为突出。 社区全面从严治党…

    科研百科 2024年10月25日
    57
  • 环境化学科研项目名称

    环境化学科研项目名称: 近年来,随着环境问题的日益凸显,环境化学的研究受到了越来越多的关注。环境化学是一门研究化学反应在环境中的行为方式、影响和响应机制的学科,其应用范围广泛,包括…

    科研百科 2025年5月4日
    1
  • “牵手门”高管被双开,违法乱纪零容忍不是空话 – 新京报快评

    国企高管“牵手门”情况通报。图/中国石油北京项目管理公司官方微信公众号 国企高管“牵手门”事件,终于有了处理结果。 据新京报报道,7月7日晚,中国石油北京项目管理公司官微发布情况通…

    科研百科 2024年3月13日
    117
  • 科研项目经费预算明细比例

    科研项目经费预算明细的比例 在科研项目中,预算明细是非常重要的一部分。预算明细应该详细列出每个项目的费用,包括人工、材料、设备、测试和实验费用等。同时,预算明细还应该包括任何额外的…

    科研百科 2024年11月10日
    1
  • 思想荟丨河南四建集团BIM建设之路(河南BIM)

    本文作者:河南四建集团BIM中心总经理 王灿 今年 1 月,住建部印发《“十四五”建筑业发展规划》,作为驱动行业数字化转型的核心技术引擎,BIM 应用大有可为。但是具体到企业和项目…

    科研百科 2022年9月8日
    239