范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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评论区!

为什么有些人反感苹果手机,现在的国产安卓手机真的无敌吗?我们客观的说,苹果手机世界老大的地位,目前还没有人能超越。和安卓手机比,我也承认苹果存在缺点,但是综合来讲还是优点多于缺点。我目前用的苹果6s,感觉还是挺流畅,偶尔有卡顿和死机。之为什么国产手机越卖越贵了?从我个人来讲,国产手机越来越贵了这个结论我是不认可的,至少经不起全方位的论证,显得片面且不严谨。国产手机真的越来越贵?这应该是小米从1999到9999后大家的固化印象,再加上前面有套现700亿,马斯克不想上班了科技圈顶流马斯克,想退休了?这源于他最新的一则动态12月10日晚,马斯克在社交媒体上表示,我正在考虑辞去我的工作,全职做一个意见领袖(influencer)。你们觉得呢?这番言论在宁德时代对无钴电池等新兴技术始终保持高度关注并开展技术布局IT之家12月13日消息,宁德时代在互动平台表示,对于无钴电池全固态电池无稀有金属电池等下一代电池和行业内的新兴技术,公司始终保持高度关注并开展技术布局。无钴电池顾名思义,从物质结科技巨头的捉迷藏游戏科技巨头Alphabet亚马逊Meta甚至微软都在追踪用户的信息。但是我们不知道的是,他们是如何在自己的平台上将这些信息货币化的。监管机构也在全面调查科技公司,发现巨头会利用搜索社外媒马斯克称应取消电动汽车补贴中新经纬12月7日电据路透中文网7日报道,特斯拉首席执行官(CEO)马斯克周一表示,美国国会不应批准拜登政府提高电动汽车补贴的法案,称该提案将使国家的预算赤字更加恶化。报道称,这位踩坑DependsOnOrder注解嵌套使用解决Bean加载优先级问题踩坑PostConstructDependsOnOrder注解嵌套使用案例今天在工作中写需求代码时,遇到的一个关于SpingBean对象加载优先级问题,结合了Spring源码,大概小米12Ultra再曝光后置镜头有点浮夸自研新技术首发助力?随着骁龙8的全球首发称埃落定,小米12系列似乎就变得有些尴尬了。即便小米12仍未官宣会在何时发布,但不少人已经把焦点放在可能会在明年下半年发布的小米12Ultra身上,毕竟它才是真美媒国际空间站即将退休NASA研究替代方案美国大众机械月刊网站12月7日发表题为美国国家航空航天局正在认真研究国际空间站的替代方案的报道,全文摘编如下二十年来,国际空间站一直是一个至关重要的在轨研究站,也是国际太空合作的全微盟携手复星启动数字星火计划推进产业数字化转型中证网讯(记者董添)12月13日,微盟集团宣布携手复星启动数字星火计划。双方将通过共同打造覆盖全生命周期的运营及营销SaaS平台,共建产业互联网流量运营场景和技术,探索产业互联网新台积电赴美建设5纳米芯片工厂,却遭英特尔呛声在美国的要求下,台积电于2020年11月决定投资35亿美元晶圆代工厂在美国设厂,新工厂规划在美国亚利桑那州凤凰城,到时候将会部署最新的5nm工艺,规划月产能2万片晶圆。然而,已经开
中关村壹号阔步前进打造硬科技产业示范中关村科学城北区地标中关村壹号站在中关村壹号A1座的顶楼,整个科学城北区的风光尽收眼底,既可远眺西山,又可以看到南沙河京密引水渠穿城而过,位于永丰基地的中关村壹号拥有得天独厚的自然iPhone13靠边站,可折叠iPhone强势来袭有期待就会有失望,对于即将发布的iPhone13,可能会令大家失望。虽然iPhone13还没有正式官宣,但根据泄露的消息来看,iPhone13与前代机型几乎没有什么区别。从外观来看区块链知识分布式存储ipfs和网盘的区别什么是IPFS?IPFS(InterPlanetaryFileSystem)星际文件系统是一个旨在创建持久且分布式存储和共享文件的网络传输协议,其内容分发网络是可寻址的。相同点1。中国物流无人机的广泛应用近几年来,随着电商经济的蓬勃发展,对传统物流的挑战日益加剧。一方面,销售订单不断增加,可用的劳动力却越来越少,供求矛盾异常突出另一方面,消费者对配送安全效率质量等方面的要求也越来越社区买菜还能持续多久?大厂们的买菜业务还能持续下去吗最近关于社区团购的新闻一个接着一个,社区买菜这个互联网大厂争相入局的赛道正在经历大调整,平台一个接着一个倒下,最终会留下谁,我们在等待!社区买菜赛道里2021年8月电动车销量排名Model3重回榜首,进口车位居第一2021年8月最新电动车上市数据出炉,特斯拉Model3单月上市量突破400辆,重夺最畅销电动车称号。据报道,搭载CCS2充电规范的特斯拉Model3于8月25日正式开始交付。在不OPPOReno7Pro放大招,首发三星GN5,5600mAh5nm,香得很销魂今年的国产四大行业巨头有一个掉队了,华为由于芯片被压制导致市场份额被小米OPPOvivo赶超。曾经华为的国内市场份额达到过50,而如今却很不容乐观,华为已经被挤出了前五。但比较欣慰vivo小米自研芯片三星定制传感器谁推动了手机摄影军备升级?作者速途网乔志斌就在人们还在对1亿像素是否方向错了?争论尚无结论的时候,手机上搭载的2亿像素传感器,它来了。日前,三星半导体正式发布首款2亿像素传感器ISOCELLHP1。根据官方千元市场除了Redmi,这4款手机也很值得,小米看了直呼内行千元市场大家可能会优先考虑Redmi机型,其实笔者以前也是那么觉得,今年Redmi依然强势,推出的RedmiNote10Pro,起售价1599元,在千元市场占据了一席之地,吸引了不128GiPhone12价格低至4799元,你还会买国产手机吗?现在入手其实有点不合适,毕竟13马上就要来了,与其买旧款不如直接等新的。即使是苹果再挤牙膏,高刷也该来了,在加上新的迭代,体验肯定会好很多。毕竟12缺少高刷新率,总归少点什么。另外今年哪款拍照手机最值得推荐?各价位拍照最强的一款手机各个价位最强的手机,每个价位只推荐一款。一。01999元我推荐的是RedmiNote9Pro,目前起售价1399元。后置四摄设计,最大的卖点就是那颗1亿像素的主摄,使用的是三星HM