Django微信小程序开发待办清单多选框与数据绑定
初学某种编程语言时,很多人会从手撸一个Todo-List(待办清单)开始。
咱们也不能免俗,从本章开始,先撸个单机版 Todo-List ,再逐步拓展为 Web 版本。 准备工作
我们在创建小程序项目时,开发工具"好心"送了些示例代码。
它是一个获取用户登录数据的小 Demo 。如果你的新版开发工具没有给示例代码,那则无视之。
因此首先将 app.wxss 和 pages/index/index.wxss 中的代码清空,免得它们捣乱。它们分别是全局和页面的样式文件,控制着页面元素的外观。
接下来修改 app.json 文件: // app.json { // ... // 修改字段 "window": { // ... "navigationBarBackgroundColor": "#6495ED", "navigationBarTitleText": "Todo-List", // ... }, // ... // 新增字段 "useExtendedLib": { "weui": true } }
app.json 是全局配置文件,控制着项目的基本属性。
"window" 字段指定了小程序的字体颜色、导航栏样式等等属性。这里我们将导航栏的背景修改为淡蓝色,将页面标题修改为 Todo-List 。保存文件后,开发工具左侧的 手机模拟器 会自动更新,可以发现导航栏已经变为蓝色了。
"useExtendedLib" 指定了本项目要使用扩展库 WeUI 。 WeUI 是官方提供的一套 UI 样式库,用过 Bootstrap 的朋友上手起来会比较快。 原生的 UI 实在有点难用(且丑)。类似 WeUI 的样式库还有很多,这个就读者以后去探索了。
扩展库的概念类似于 Python 开发时用 pip 安装第三方库,不同的是扩展库并没有将三方库安装到程序包中,而是对公共资源的某种"引用"。因此使用扩展库的好处是它不占小程序自己的体积,但是缺点是目前支持的库非常的少,WeUI 就是其中之一。
小程序的体积应当尽可能小。体积小的好处是首次启动时加载时间较短,用户体验佳。另一方面是因为微信规定小程序有体积上限,超过上限是无法部署到线上的。见小程序最大体积。
准备工作这样就完成了,接下来开始撸正经代码。 WXML模板
从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中 HTML 描述页面的结构, CSS 描述页面的样子, JS 处理页面和用户的交互。
在小程序中也有同样的角色,其中 WXML 充当的就是 HTML 的角色。
根据 app.json 中的配置可知, pages/index/ 是小程序的首页。因此首先清空 pages/index/index.wxml 的内容,然后写入下面的神秘文字: 是小程序中的最基础的视图容器,类似 HTML 的标签 p 。此外小程序还提供了 button , text 等等标签,以及地图、视频、音频、扫码等等开放能力。 与传统网页开发不同,小程序的模板可以包含 if 、 for 等逻辑控制语法。比如上面的 wx:for="{{items}}" 语句,意思是循环渲染 items 容器中的元素(items后面马上会定义)。 {{}} 花括号表示这里不是一个普通的字符串,而是实实在在的数据。 wx:key 用于帮助模板引擎识别每个 items 元素,类似于数据库中的主键。 是多选框控件整体。 bind:change="checkboxChange" 意思是监听多选框控件的状态,每当其内容发生变化时,立即调用 checkboxChange() 方法(此方法后面马上会定义)。 bind:change 是监听控件事件的内置固定写法,类似的还有按钮的 bind:tap 、输入框的 bind:input 等等。 为多选框的实际单个元素。 value 为其绑定的数据, checked 属性表示它是否被选中。
除此之外,代码里还有很多类似 weui-cells/weui-cell__bd 之类的属性,这个就是 WeUI 提供的美化 UI 控件外观的样式了,有需要对照WeUI文档抄过来即可,和 Bootstrap 差不多,就不展开讲了。读者可以尝试把这些属性删除后,看看多选框外观的变化。 JS逻辑层
上面的 WXML 中出现了两个非常关键的东西: items ,它是数组类型的数据,提供多选框循环渲染所需的内容。 checkboxChange() 方法,它的作用是监听多选框的状态,一但发生变化则执行某些逻辑处理。
在传统的网页开发中,接下来就应该在页面底部写 Javascript 脚本,定义这些数据和方法了。但小程序强大的地方在于:它将视觉外观的渲染,和逻辑层彻底拆开了,各司其职。
来实际体验下。清空 pages/index/index.js 中的示例代码,写入下面这一坨: // pages/index/index.js Page({ // 页面持有的状态数据 data: { items: [{ id: 3, content: "和丢丢去超市买白菜", checked: false, }, { id: 2, content: "周二和老王吃烧烤", checked: false, }, { id: 1, content: "凌晨给老板汇报工作", checked: false, } ], }, // 监听多选框的状态改变事件 checkboxChange(e) { // 页面持有的数据 // 获取本地数据的写法为 this.data.xxx const items = JSON.parse(JSON.stringify(this.data.items)) // checkbox持有的数据 const values = e.detail.value // 将items和values进行对比 // 根据values的值更新页面数据(即data.items) for (let i = 0, lenI = items.length; i < lenI; ++i) { items[i].checked = false for (let j = 0, lenJ = values.length; j < lenJ; ++j) { // values[j]是String // 将其转换为Int if (items[i].id === parseInt(values[j])) { items[i].checked = true break } } } // 更新数据 this.setData({ items: items }) // 打印的内容会展现在调试器中 console.log(this.data.items) }, })
分解上面的内容: 小程序的每个页面,都需要在对应的 js 文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。所以你可以看到,这个 js 文件中所有代码都是在页面构造器 Page() 中的。 data 字典对象,它持有了当前页面所有的 本地状态 。大多数情况下,你都应该将数据放到这里集中管理。一但其中的数据发生变化,小程序能够感知到并且立即自动更新页面中对应的元素。这种模式简化了程序员智力负担,你不再需要手动更新页面使其和数据相对应。这也就是传说中的 数据绑定 ,或者叫 数据驱动 了。
页面中所有需要用到的方法也都定义在 Page() 构造器中,比如 checkboxChange() 。几个值得关注的地方: 它的参数 e 是多选框控件传递进来的,包含整个控件的状态和数据。你可以用 console.log(e) 打印看看里面的内容。 方法用了两个 for 循环检查了多选框的状态,如果当前条目被选中则将 items 中对应的条目设置为 已选中 ( .checked = true ),如果未被选中则设置为 .checked = false 。 调用 Page 构造器内置的方法 this.setData({...}) 更新数据,以键值对的方式给出。注意页面持有的状态必须用 this.setData() , 不能手动更新 (比如用等号赋值),否则将导致渲染不同步等 bug 。 赋值局部变量时用 JSON.parse(JSON.stringify(...)) 实现了深拷贝。如果这里直接用等号赋值 const items = this.data.items ,仅仅是传递了对数据的"引用"(浅拷贝),在后续操作中将违背"不能手动更新本地状态"的原则。
这就大功告成了。
注意到没有,逻辑层只关注了 data 中数据的状态。至于更新渲染的工作,框架自动帮你完成了。
保存文件,重载模拟器效果如下:
神奇吧。强烈建议第一次接触数据驱动模式的读者在这里停一下,对比观察 wxml 和 js 文件中各个控件、事件、数据、方法之间的对应关系。 Component构造器
上面用的 Page 构造器适用于简单的页面,对于复杂的页面它可能并不好用。
幸好小程序还提供另一种选择: Component 构造器。虽说 Page 和 Component 有很多细节上的差别,但就目前这个简单的例子来说,唯一的区别是:方法需要放在 methods: { } 里面。
试试改造它: // pages/index/index.js Component({ data: { items: [...] }, methods: { checkboxChange(e) { // ... } }, })
功能完全一致。
后续章节将以 Compnent 构造器为主讲解,想了解它两更多区别和细节的可参考文档。 总结
现在我们有个可以瞎点来点去的多选框列表了。但这没用啊,它只是个固定内容的小玩意。
下一章继续探讨小程序的数据输入,让示例真正动起来。
点赞 or 吐槽?来博客或GitHub评论区!
理想ONE是不是工业垃圾?理想ONE凭借13485辆的数据,成为了首个月销破万的国产高端车型,也再一次将这款本就备受争议的车型,再次送上了风口浪尖。至今都有人在问,理想ONE是不是工业垃圾?说是工业垃圾的原
支付宝海王功能,女生小心大家好,我是人见人爱花见花开的奶思君。你有记账的习惯吗?不记不知道,一记吓一跳!原来花了这么多???最近,支付宝App上线了一个支付宝小荷包的功能,每个小荷包的存入和支出都有独立的
浙江首富王均瑶,38岁离世后妻儿如何?大儿子数年连登胡润富豪榜中国温州有这样一位商业奇才,年纪轻轻就身家过亿,本是美名远播,但在他英年早逝之后,却总被人调侃给司机打工。这位商业奇才叫王均瑶,15岁因家中贫穷而辍学,25岁便身家百亿,38岁却因
何炅出事,谢娜吃红利说起来上一次何炅爆出新消息,还是他深夜街头买醉,抱着周迅痛哭流涕呢,而当时他也是借机狠狠卖了一波惨,他的粉丝更是重拳出击,在各大社交平台发帖留言,为何老师抱屈,说什么何老师是娱乐圈
朱雨辰42岁痛哭,错过汤唯霍思燕,他何时才能找到下个ampampquot妈ampampquot?可能谁都不会想到,一个男明星会因为找不到对象委屈地痛哭流涕。去年,在湖南台的综艺我家那小子里,42岁的朱雨辰在和朋友聚餐后突然情绪崩溃。怎么就没一个愿意在我身边的人?我五年不想谈恋
知网深夜通告知网从不向任何个人销售学术不端检测服务12月11日23时59分中国知网官方微信公众号(CNKI知网)发布了一条题为学术不端文献检测系统公告的推文似在变相对知网论文查重收费高学子苦知网久矣进行回应中国知网官方微信公众号深
科沃兹跌破7万了在看到11月轿车销量排行榜的时候,心里是激动的,国产车份额占比越来越高,在近年来的新品冲击之下,已经有不少比较出圈的车型,比如五菱宏光MINIEV吉利帝豪比亚迪秦还有长安逸动和荣威
六位女明星偷偷生子,从深爱到毁灭,远不止张碧晨一个痞特玩今年,送子观音特别关照了一下娱乐圈。那一头某清纯小仙女有了三个孩子,这一边走纯情人设的华晨宇成了孩子的爸。王子文这头才承认有了孩子,吴倩张雨剑那一头又被爆料隐婚生子。婚恋生子
NASA一周新闻速览(2021。12。10)新一批宇航员候选人太空通信进入新时代新的X射线卫星任务最近新闻速递,尽在本周NASA!CreditNASA12月6日,NASA在约翰逊航天中心(JohnsonSpaceCenter
万有引力探秘(1)原创马也Maye牛弹琴NTQ202112122203收录于话题统一场论28个内容大统一理论27个内容量子光学13个内容引力场2个内容引力3个内容第十四章,万有引力完美与平衡是物质(
方舟生存进化阿马加龙脾气暴躁,在它眼前晃悠当心被万刺穿心作为一款有着400多种生物的Steam生存沙盒游戏,在方舟生存进化中,玩家要面对的一个重大的挑战就是被这些生物给无情的虐杀,而被生物攻击也有三种可能,第一种是玩家遇到的生物本身就很
关于秋天值得收藏的唯美的句子1。天空偷看我们的故事成了秋天的落叶。2。菊花煮竹叶青,人与海棠依旧在。3。柔软的白云里,有橘子的甜蜜。4。想被秋天卷起,卷进温柔的清风里。5。爱初秋的微风,傍晚的落日,以及恰合时
国际上首次公开发布!真实宇宙长这样8月27日,在太原举行的第二届中国空间科学大会上,来自中国科学院国家天文台的研究人员发布了EPWXT探路者的首批在轨实测结果。该设备是爱因斯坦探针(EP)卫星宽视场X射线望远镜(W
宇宙的第一种分子终于被发现经过几十年的探索,宇宙中形成的第一种分子首次在太空中被检测到。科学家们使用世界上最大的机载天文台,美国宇航局的平流层红外天文台(SOFIA)在我们自己的星系中发现了它的特征,因为飞
2022年度中国品牌价值500强英国品牌评估机构品牌金融(BrandFinance)发布2022中国品牌价值500强榜单,品牌总价值达到人民币133108亿元。工商银行蝉联中国最有价值的品牌。品牌价值前十大品牌还
CBA三消息!林书豪抵达广州,马布里公开谈高登,弗格喊话莫兰德整个8月份,CBA的球队都在忙着处理国内球员注册的事务,包括一些续约和引援也得到了妥善处理,当然外援工作更不能忽视,这是很多球队拿到好成绩的基础。目前来看,今年外援的流动幅度不是很
英雄联盟12。17测试服改动卢娜组合遭削弱,女枪加强,茂凯大改随着各大赛区的季后赛相继进入收官,那么接下来的重点自然是即将在9月底北美进行的2022全球总决赛。不过在此之前,关于英雄联盟版本的改动必然也将成为热议的话题,而在最新的12。17版
直击灵魂深处的语句摘录二1。事情看透,你就明白该如何进行人情看透,你就明白该如何相处事情看破,你就不想做事了人情看破,你就不想做人了。2。如果你足够优秀,最坏的可能也不过是被一个比你更优秀的人杀死但是,如
最新自拍照显示NASA毅力号漫游车在测量自己的车轮轨迹据CNET报道,美国宇航局(NASA)的毅力号漫游车刚刚拍摄了一些新的照片。这张引人注目的阴影图片显示了漫游车车身的一部分和其头部所在的桅杆。这个带轮子的探险家在火星土壤中留下了一
漫谈元宇宙之一十问元宇宙来源赛西数智化转型作者中国电子标准研究院邱硕涵博士一元宇宙是什么?元宇宙是什么?是在元宇宙研究中被广泛关注但是难以形成统一共识的重要问题。元宇宙源于1992年,NealStephe
除华为外,还有以下这3家公司让美国忌惮,他们强在哪里?师夷之技以制夷!21世纪,必然是属于中国崛起的世纪。我们要想崛起,那么必须要超越美国,而要超越美国就要认清美国到底是一个怎样的国家。网友们都清楚,美国是依靠金融科技军事三大武器而成
最便宜的4款12256GB手机,优缺点各不同,价格都在2000以内您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。为了能够提高手机的运行速度,在使用手机的时候更流畅,很多人在购买手机的时候,会议选择一步到