城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Django微信小程序开发待办清单多选框与数据绑定

1月17日 罗刹长投稿
  初学某种编程语言时,很多人会从手撸一个TodoList(待办清单)开始。
  咱们也不能免俗,从本章开始,先撸个单机版TodoList,再逐步拓展为Web版本。准备工作
  我们在创建小程序项目时,开发工具好心送了些示例代码。
  它是一个获取用户登录数据的小Demo。如果你的新版开发工具没有给示例代码,那则无视之。
  因此首先将app。wxss和pagesindexindex。wxss中的代码清空,免得它们捣乱。它们分别是全局和页面的样式文件,控制着页面元素的外观。
  接下来修改app。json文件:app。json{。。。修改字段window:{。。。navigationBarBackgroundColor:6495ED,navigationBarTitleText:TodoList,。。。},。。。新增字段useExtendedLib:{weui:true}}
  app。json是全局配置文件,控制着项目的基本属性。
  window字段指定了小程序的字体颜色、导航栏样式等等属性。这里我们将导航栏的背景修改为淡蓝色,将页面标题修改为TodoList。保存文件后,开发工具左侧的手机模拟器会自动更新,可以发现导航栏已经变为蓝色了。
  useExtendedLib指定了本项目要使用扩展库WeUI。WeUI是官方提供的一套UI样式库,用过Bootstrap的朋友上手起来会比较快。原生的UI实在有点难用(且丑)。类似WeUI的样式库还有很多,这个就读者以后去探索了。
  扩展库的概念类似于Python开发时用pip安装第三方库,不同的是扩展库并没有将三方库安装到程序包中,而是对公共资源的某种引用。因此使用扩展库的好处是它不占小程序自己的体积,但是缺点是目前支持的库非常的少,WeUI就是其中之一。
  小程序的体积应当尽可能小。体积小的好处是首次启动时加载时间较短,用户体验佳。另一方面是因为微信规定小程序有体积上限,超过上限是无法部署到线上的。见小程序最大体积。
  准备工作这样就完成了,接下来开始撸正经代码。WXML模板
  从事过网页编程的人知道,网页编程采用的是HTMLCSSJS这样的组合,其中HTML描述页面的结构,CSS描述页面的样子,JS处理页面和用户的交互。
  在小程序中也有同样的角色,其中WXML充当的就是HTML的角色。
  根据app。json中的配置可知,pagesindex是小程序的首页。因此首先清空pagesindexindex。wxml的内容,然后写入下面的神秘文字:!pagesindexindex。wxmlviewclasscontainerviewclassweuicellsweuicellsaftertitlecheckboxgroupbind:changecheckboxChangelabelclassweuicellweuichecklabelwx:for{{items}}wx:keyidviewclassweuicellhdcheckboxvalue{{item。id}}checked{{item。checked}}viewviewclassweuicellbd{{item。content}}viewlabelcheckboxgroupviewview是小程序中的最基础的视图容器,类似HTML的标签p。此外小程序还提供了button,text等等标签,以及地图、视频、音频、扫码等等开放能力。与传统网页开发不同,小程序的模板可以包含if、for等逻辑控制语法。比如上面的wx:for{{items}}语句,意思是循环渲染items容器中的元素(items后面马上会定义)。{{}}花括号表示这里不是一个普通的字符串,而是实实在在的数据。wx:key用于帮助模板引擎识别每个items元素,类似于数据库中的主键。是多选框控件整体。bind:changecheckboxChange意思是监听多选框控件的状态,每当其内容发生变化时,立即调用checkboxChange()方法(此方法后面马上会定义)。bind:change是监听控件事件的内置固定写法,类似的还有按钮的bind:tap、输入框的bind:input等等。为多选框的实际单个元素。value为其绑定的数据,checked属性表示它是否被选中。
  除此之外,代码里还有很多类似weuicellsweuicellbd之类的属性,这个就是WeUI提供的美化UI控件外观的样式了,有需要对照WeUI文档抄过来即可,和Bootstrap差不多,就不展开讲了。读者可以尝试把这些属性删除后,看看多选框外观的变化。JS逻辑层
  上面的WXML中出现了两个非常关键的东西:items,它是数组类型的数据,提供多选框循环渲染所需的内容。checkboxChange()方法,它的作用是监听多选框的状态,一但发生变化则执行某些逻辑处理。
  在传统的网页开发中,接下来就应该在页面底部写Javascript脚本,定义这些数据和方法了。但小程序强大的地方在于:它将视觉外观的渲染,和逻辑层彻底拆开了,各司其职。
  来实际体验下。清空pagesindexindex。js中的示例代码,写入下面这一坨:pagesindexindex。jsPage({页面持有的状态数据data:{items:〔{id:3,content:和丢丢去超市买白菜,checked:false,},{id:2,content:周二和老王吃烧烤,checked:false,},{id:1,content:凌晨给老板汇报工作,checked:false,}〕,},监听多选框的状态改变事件checkboxChange(e){页面持有的数据获取本地数据的写法为this。data。xxxconstitemsJSON。parse(JSON。stringify(this。data。items))checkbox持有的数据constvaluese。detail。value将items和values进行对比根据values的值更新页面数据(即data。items)for(leti0,lenIitems。ilenI;i){items〔i〕。checkedfalsefor(letj0,lenJvalues。jlenJ;j){values〔j〕是String将其转换为Intif(items〔i〕。idparseInt(values〔j〕)){items〔i〕。checkedtruebreak}}}更新数据this。setData({items:items})打印的内容会展现在调试器中console。log(this。data。items)},})
  分解上面的内容:小程序的每个页面,都需要在对应的js文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。所以你可以看到,这个js文件中所有代码都是在页面构造器Page()中的。data字典对象,它持有了当前页面所有的本地状态。大多数情况下,你都应该将数据放到这里集中管理。一但其中的数据发生变化,小程序能够感知到并且立即自动更新页面中对应的元素。这种模式简化了程序员智力负担,你不再需要手动更新页面使其和数据相对应。这也就是传说中的数据绑定,或者叫数据驱动了。
  页面中所有需要用到的方法也都定义在Page()构造器中,比如checkboxChange()。几个值得关注的地方:它的参数e是多选框控件传递进来的,包含整个控件的状态和数据。你可以用console。log(e)打印看看里面的内容。方法用了两个for循环检查了多选框的状态,如果当前条目被选中则将items中对应的条目设置为已选中(。checkedtrue),如果未被选中则设置为。checkedfalse。调用Page构造器内置的方法this。setData({。。。})更新数据,以键值对的方式给出。注意页面持有的状态必须用this。setData(),不能手动更新(比如用等号赋值),否则将导致渲染不同步等bug。赋值局部变量时用JSON。parse(JSON。stringify(。。。))实现了深拷贝。如果这里直接用等号赋值constitemsthis。data。items,仅仅是传递了对数据的引用(浅拷贝),在后续操作中将违背不能手动更新本地状态的原则。
  这就大功告成了。
  注意到没有,逻辑层只关注了data中数据的状态。至于更新渲染的工作,框架自动帮你完成了。
  保存文件,重载模拟器效果如下:
  神奇吧。强烈建议第一次接触数据驱动模式的读者在这里停一下,对比观察wxml和js文件中各个控件、事件、数据、方法之间的对应关系。Component构造器
  上面用的Page构造器适用于简单的页面,对于复杂的页面它可能并不好用。
  幸好小程序还提供另一种选择:Component构造器。虽说Page和Component有很多细节上的差别,但就目前这个简单的例子来说,唯一的区别是:方法需要放在methods:{}里面。
  试试改造它:pagesindexindex。jsComponent({data:{items:〔。。。〕},methods:{checkboxChange(e){。。。}},})
  功能完全一致。
  后续章节将以Compnent构造器为主讲解,想了解它两更多区别和细节的可参考文档。总结
  现在我们有个可以瞎点来点去的多选框列表了。但这没用啊,它只是个固定内容的小玩意。
  下一章继续探讨小程序的数据输入,让示例真正动起来。
  点赞or吐槽?来博客或GitHub评论区!
搜索 投诉 评论 转载

腾讯和字节的再一次交锋腾讯和字节再一次交锋了,两个公司的高管,针锋相对。见下图:长久以来,腾讯的业务围绕着微信铺的越来越广,而所到之处也是席卷对手,南山必胜客不仅仅擅长打官司,更加擅长迅速占领……609元买家庭影院音响组合6件套,太划算了随着疫情的反复,不少KTV娱乐场所都暂时关闭了,大家没有了可以一展歌喉的地方,有时候心痒痒想唱上两句,如何是好呢?不如就给自己家里安装一个家庭影院音响吧,还原音乐本身,让……英国对加密监管发出积极信号欲成为全球加密资产技术中心财联社区块链日报(北京,记者董宇佳)讯,面对2万多亿美元的加密货币市场,以及全球日益普及的趋势,英国发出积极信号,有望成为最新一个对该行业进行全面监管的国家。本周,英国公……联想,联想!翻车率100我这里要说的联想是一个企业名称,是一个产品品牌,跟你最近听到看到的热耳惹眼的那个联想是一回事。截至目前,我只用过联想的一个产品,一台thinkpad笔记本电脑,完全翻车!……目前你发的微头条出爆款了吗?最多的展现量是多少?没有啊!我认识爆款,呵呵!爆款不认识我。在微头条,我的展现量最多4万多,阅读量最多四千多,收益最高1。33元,这还是蹭上了火车站改名的热点。其余几分几毛不值一提,呵呵!我……滴滴新规13万以下车型只能跑轻快!司机逃往滴答一喂顺风车2021年的汽车行业风起云涌!小米、美团、百度等互联网企业纷纷下场造车,在汽车行业翻云覆雨。网约车市场是车企的第一聚宝盆,很多车企希望能够和滴答、一喂顺风车、哈啰等……ipfs,是什么,它和fil有什么关联?ipfs全称叫星际文件系统,主要作用是做分布式存储。现在我们用的网页底层协议是HTTP这就属于一个中心化的存储空间,比如你打开淘宝,淘宝的数据都是储存在阿里内部的,如果阿里内部……智能手机充电,是应该用到电量剩余10以下充电,还是不管电量多大家在使用智能手机的时候,尽量不要等电量消耗一空,手机自动关机后再给它充电。一般情况下当手机提示电量低的时候,就应该充电了。平时50左右的时候充电会比较好。因为锂离子聚合……Django微信小程序开发待办清单多选框与数据绑定初学某种编程语言时,很多人会从手撸一个TodoList(待办清单)开始。咱们也不能免俗,从本章开始,先撸个单机版TodoList,再逐步拓展为Web版本。准备工作我……无法在此iPhone激活面容ID怎么办?最近许多苹果用户在论坛反馈无法激活面容ID。在这篇文章中,我们将探讨可能导致该问题的原因以及解决办法。哪些iPhone机型支持面容ID?你要做的第一件事是检查您的i……OriginOSOcean体验一个全新的系统,全新的体验,值经历了过去一年多时间对全新系统OriginOS的梳理之后,V粉刚刚迎来了期盼已久的2。0版大更新OriginOSOcean。没有按照软件行业常见的方式来为原系统Origi……华为鸿蒙来了!开机动画美炸了,用PPT一分钟就搞定据新华社报道,华为将在6月2日举行线上发布会,鸿蒙手机真的要来了!因为我也对鸿蒙操作系统期待已久,看到消息的第一时间,就点进了HarmonyOS官博。结果却被鸿蒙系……
继续挤牙膏,骁龙895性能提升有遗憾扮猪吃虎的小钢炮本田全新思域Si将于10月19日亮相,搭载1vivo将发布6000mAh新机,66W快充蔡司镜头,实力不为何科学家总认为外星科技超越了我们?有什么凭证吗?马化腾很无奈为什么你们都将QQ号卖了?网友可以换套房腾讯字节入局造芯,中国芯陷入人才内卷反对通信欠费入征信,动了谁的奶酪?写在真我gtneo3发布以后目前坐标南京某外资车企,接到恒大新能源offer,工资涨幅5有一说一!比起iPhone13,我更推荐你买这几款手机Android13让手机界面变超美!传加入4种色彩风格变化黑鲨游戏手机4怎么样?
年肖狗准运程(83属猪人2020运程)药用菊花有哪些品种保险公司工作计划陈小春拒不谈风,古惑仔再回首,终究还是少了朱永棠什么情况为无效合同2022诗歌一缕轻烟李涛:公益不应是少数人的奢侈品300字优秀作文未来的家乡杭姓女孩子起名三个字地球消灭人类的5个办法透视职业生涯的误区个人职业生涯规划的步骤提升订单转化率做好这五大数据分析

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁