今天想做一个左滑删除的操作,然后发现一个问题,不知道是我程序问题,还是小程序的bug。
在for循环的列表渲染里有一个input控件,左滑删除以后,发现input删除的是最后一条,view什么的都能按滑动的id删除,但是就是input控件,默认就是删除for循环里的最后一个。
wxml代码如下:
<view wx: for = "{{alarm_array}}" wx:key= "" class = "input-item-header" bindtouchstart= "touchstart" bindtouchmove= "touchmove" wx: for -item= "item" id= "{{item.order}}" > <view class = "input-item-header-content {{item.isTouchMove ? 'touch-move-active' : ''}}" > <view class = "input-label-title special slide-delete" >报警号{{item.order}}</view> <input id= "input{{item.order}}" class = "slide-delete" placeholder= "请输入报警号{{item.order}}" /> <view class = "del" catchtap= "del" data-id= "{{item.order}}" >删除{{item.order}}</view>
</view> |
需要添加wx:key,如果不提供,那么在删除的时候并不知道要删除那个input,文档中对wx:key有详细描述
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/list.html
wx:key
如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如
<input/>
中的输入内容,<switch/>
的选中状态),需要使用wx:key
来指定列表中项目的唯一的标识符。wx:key
的值以两种形式提供字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
保留关键字
*this
代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。