从 jQuery 平滑过渡到 vue (中)

今天看了《从jQuery 平滑过渡到 vue》的浏览量对于我个人是个惊喜。先感谢大家的支持! 真的没想到,有点哽咽,同时感觉自己责任也大了。所以也想好好地把这篇文章写好。计划今天介绍一下项目,在下集将 jquery 转换为 vue。

用 jquery 开发单页应用套路 1. 渲染视图 2 获取数据 3 绑定事件 4 更新视图,5 设计路由。在高级点就是设计一个 state 状态机持有页面的状态,然后将交互解释为 action 动作,动作更新状态,按钮点击也会根据页面状态触发不同动作。今天这里的代码我是 github 上找到,很有代表性,我就以此基础进行修改了。这是应用运行起来的效果,自己汉化了一下,其他基本没动,感谢作者的代码。

项目我是用 npm 管理的,配置好 package.json 运行一下 npm install 读取 package.json 安装所有的依赖。

然后再 index.html 中引用一下,需要在一个服务启动项目,这里我用 visual studio code ,一个非常不错做的 IDE 轻量级的,很好用推荐。

页面设计为三部分,首先是 header 部分,包含一个标题,还有创建一个任务的输入框。然后就是中间的任务列表,列表可以checkbox 表示任务结束,可以点击 x 来删除任务,底部为导航,可以切换显示全部任务,显示未完成和已完成任务列表。然后显示未完成任务列表。

这里介绍一下 handlerbars 这个库,在我刚刚入行时,接受一个任务来基于混合模式来开发 android 应用,基本思路是自己写一个 webview ,然后用 webview 来访问一个远端的单页应用。接受到这个任务我就开始搭建我们的单页应用,首先需要设计我的路由,而且视图需要模块化,也可以叫做组件化。所以需要模板来根据不同 json 来渲染视图。当时我就选中了 handlerbars 来实现这个需求。

说到 handlerbars ,我们需要懂得其实现原理,在这我们就简单地说了 complie 出一个模板,然后将一个上下文(也就是和这个模板绑定数据)传入创建生产一个 html 字符串。

工具类我就不说了,uuid 产生一个随机的 id,pluralize 不用考虑了处理英文单复数的,store 简单地对 localstorage 封装了来存储数据的

init 是初始化启动我们应用的方法,入口。这里做的都是初始化的工作,我们一一来看看,首先初始化数据库,然后就是初始化模板,绑定事件注意是事件而不是数据。最后就是路由,这里:filter 是一个参数,可以读取参数来赋值给 filter,我们的路由主要控制显示筛选过的任务。然后初始化路由为 all

这里路由管理用到了一个 director.js 库,通过路由来控制视图切换,读取路由信息来判断页面。

jQuery 是基于事件的,所以绑定事件显得至关重要。bind(this)

渲染方法,先获取数据,然后将数据传入模板中渲染出 html

渲染底部同样调用我们的在 init 创建好的 handlebar 模板。

切换所有的任务的状态,先获取 check 然后根据状态来切换每条任务的完成状态。

我们获取各种状态的列表,getFilteredTodos 获取筛选后的任务列表。

删除所有已完成的任务,也就是让 todos 列表筛选出所有未完成任务。

根据任务的 id 来获取该条任务的在列表的位置,这里先从 li 的 data-id 属性获取任务的 id 然后用 id 来查找 todo 这样我们就能操作这条任务。是删除还是更新呀。

创建一条任务,先清空新任务输入框,如果输入框有内容,将现有的任务添加到任务列表。

通过该方法来切换该任务的状态。

编辑模式,我们为任务条目添加编辑样式,让他成为焦点。

编辑的快捷键,如果输入是回车键表示退出编辑模式,如果输入 ESC 键在退出之前为记录添加 abort 属性。

更新条目,先获取任务的 dom ,如果任务记录中包含 abort 属性,将属性赋值 false , 如果没有任务没有内容就清楚该任务。如果有任务有内容就更新 todos 列表中该任务的内容。

删除一条任务,将该任务从 todos .中移出让后开始渲染界面。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 9,550评论 1 52
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,170评论 22 257
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,146评论 0 3
  • 1 儿子上了小学,上午10点半放学,下午2点半上课,作为上进的打工狗,我们两口子自然不能接孩子。好在学校附近有很多...
    白秋练阅读 162评论 0 0
  • 2017年10月28日星期六,这一天过得真累啊,看两个孩子累啊,小的感冒还没好,心情不好,刚抱着,不好受还不吃药,...
    爱笑的丫头_327b阅读 173评论 0 0