JavaScript 应用开发 #4:切换任务的完成状态
在勾选了任务项目左边的对号(复选框)以后,会将任务的状态标记为已完成,取消勾选的话,又会把任务的状态标记为未完成。所以, 我们需要一个可以切换任务完成状态的方法。在任务模型里面,表示任务状态的属性是 completed,它的值是 true 表示任务是完成的,如果是 false 就表示任务是未完成的,这个切换完成状态的方法其实就是去修改这个 completed 属性的值。
实现这个功能,可以去监听任务项目的这个复选框的点击的事件,每次点击都会去执行一个方法,这个方法做的事就是保存与任务当前的 completed 属性的值相反的值,也就是如果当前任务的 completed 是 true ,保存的值就是 false ,如果是 false ,要保存的值就是 true 。
定义切换任务状态的方法
这个切换任务状态的方法修改的是跟模型相关的属性的值,所以,可以在任务模型里面,去定义这个方法,打开 js/Models/Todo.js,在 app.Todo 这个模型里面,去添加一个方法:
toggle: function() {
this.save({
completed: !this.get('completed')
});
}
toggle
,就是用来切换模型的状态的方法。在这个方法里,this.save
,表示的是使用当前这个模型的 save 方法,它可以保存模型的属性和值。在这个 save 方法里,设置了一个要保存的模型的 completed 这个属性还有对应的值,this.get
,表示使用当前模型的 get 方法去获取到模型里的指定的属性的值,这里就是得到 completed 这个属性的值。在它的前面,还有一个 !
号,这是一个否定逻辑运算符,这样,如果在它后面计算出来的结果是 true ,最终得到的结果就是 false,如果计算出来的结果是 false,用否定逻辑运算符运算之后,得到的结果就是 ture 。这样,每次执行这个 toggle 方法,都会保存与当前模型的 completed 的值相反的值。
监听发生在复选框上的点击事件
下面,再去监听在切换状态的复选框上发生的点击事件,发生点击事件以后,就去执行一下在模型定义的用来切换任务状态的 toggle 方法。因为这个复选框元素属于模型视图的一部分,所以可以在模型的视图上面去监听它的事件,打开 js/Views/TodoView.js,在视图里面监听 DOM 事件可以添加一个 events 属性:
// 监听 DOM 事件
events: {
'click .toggle' : 'toggleCompleted',
}
click 表示要监听是一个点击的事件,后面的 .toggle
,表示是发生在这个带有 .toggle 类的元素上面的点击事件,发生这个事件,去执行 toggleCompleted
这个方法,在下面,再去定义这个方法:
// 切换任务状态
toggleCompleted: function() {
this.model.toggle();
},
这个方法做的事,就是去执行与这个视图相关的那个模型里面的 toggle 方法,也就是刚才我们在模型里面定义用来切换任务状态的方法。
练习一
保存文件以后,用 Chrome 浏览器打开应用的主页 index.html ,打开浏览器的开发者工具(Mac:alt + command + I,Win:alt + ctrl + I),再打开 Resources 选项卡,Local Storage ,file:// 。
在应用的界面上,找到一条任务,然后点击切换状态的对号,完成以后,在浏览器的 Local Storage 里面,找到这条任务,观察一下它的 completed 属性的值,然后点击开发者工具左下角的刷新按钮,完成后,再看一下这条任务的 completed 属性的值。
练习二
下面,我们可以手工去执行一下模型的 toggle 方法,打开浏览器的控制台,然后按下面的步骤去试一下:
1. 找出在集合里面的一个模型,访问这个模型的 attributes 属性。观察它的 completed 属性的值。
app.todoList.at(0).attributes
2. 找出集合里面的一个模型,执行模型里面的 toggle 方法。
app.todoList.at(0).toggle()
3. 再次访问这个模型的 attributes 属性。观察它的 completed 属性的值。
app.todoList.at(0).attributes
4. 获取这个模型的 completed 属性的值。
app.todoList.at(0).get('completed')
JavaScript 应用开发 #4:切换任务的完成状态由源码搜藏网整理,转载请注明出处http://www.codesocang.com/jiaocheng/js/9784.html
JavaScript 应用开发 #4:切换任务的完成状态的更多相关文章
- NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- Javascript 模块化开发上线解决方案
最近又换部门了,好频繁地说...于是把这段时间搞的小工具们简单整理了一下,作了一个小的总结.这次用一个简单业务demo来向大家介绍一下Javascript模块化开发的方式和自动化合并压缩的一些自己的处 ...
- JavaScript 应用开发 #5:为完成的任务添加样式
判断一下任务的状态,如果是完成的任务,可以在任务项目的上面,添加一个额外的 css 类,在这个 css 类里,可以去定义完成的任务的样式.比如,把文字的颜色变成浅友色,并且在文字上面添加一条删除线.这 ...
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- Unity iOS混合开发界面切换思路
Unity iOS混合开发界面切换思路 最近有很多博友QQ 私信 或则 留言联系我,请教iOS和Unity界面之前相互切换的问题,源代码就不私下发你们了,界面跳转功能的代码我直接贴到下面好了,顺带说i ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--选项卡切换效果
利用JavaScript知识,实现选项卡切换的效果. 效果图: 文字素材: 房产: 275万购昌平邻铁三居 总价20万买一居 200万内购五环三居 140万安家东三环 北京首现零首付楼 ...
- JavaScript模块化开发整理
在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...
- Javascript模块化开发-轻巧自制
Javascript模块化开发-轻巧自制 一.前言现在javascript的流行,前端的代码越来越复杂,所以我们需要软件工程的思想来开发前端.模块化是必不可少的,这样不仅能够提高代码的可维护性.可扩展 ...
随机推荐
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-002-激活PROFILE、设置默认值、@ActiveProfiles
一. Spring honors two separate properties when determining which profiles are active:spring.profiles. ...
- USB OTG
OTG检测的原理是:USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时设备 ...
- Linux搭建SVN 服务器
Linux搭建SVN 服务器 1 安装SVN 2 使用客户端连接 2.1 使用windows的客户端 2.2 使用Linux下的命令行 3 ...
- VS2012中使用纯C实现COM的小问题
用VS2012新建C++工程都预定义了宏__cplusplus,所以引用到的都是C++的定义.但是要用C实现的话,一般都是也就不是C++的了.比如以下代码: #undef INTERFACE #def ...
- perl 初始化Hash
Vsftp:/root/perl/6# cat a5.pl use Data::Dumper; my @arr=qw/a bc d /; my %rec=(); for $field (@arr){ ...
- android发送/接收Json包含中文的处理
转自:http://wiki.neal365.com/2013/02/25/android%E5%8F%91%E9%80%81%E6%8E%A5%E6%94%B6json%E5%8C%85%E5%90 ...
- Linux修改文件时候出现崩溃,产生了一个.swap交换文件,如何修复?
有时候在用vim打开文件时提示类似以下的信息: E325: 注意 发现交换文件 ".exportcert.cpp.swp" 所有者: liuchuanliang 日期: Th ...
- Hadoop RPC源码阅读-客户端
Hadoop版本Hadoop2.6 RPC主要分为3个部分:(1)交互协议(2)客户端(3)服务端 (2)客户端 先展示RPC客户端实例代码 public class LoginController ...
- Hadoop RPC源码阅读-交互协议
Hadoop版本Hadoop2.6 RPC主要分为3个部分:(1)交互协议(2)客户端 (3)服务端 (1)交互协议 协议:把某些接口和接口中的方法称为协议,客户端和服务端只要实现这些接口中的方法就可 ...
- HDU-2539 点球大战
点球大战 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...