事件冒泡
e.target.dataset
获取的是一个对象,如果我们要获取index索引需要:Object.values(e.target.dataset)+''
- 微信小程序需要通过
this.setData({msg:''})
来动态改变data,如果需要改变的data是一个数组的其中一项,需要:this.setData({'array['+idx+'].m':''})
18/6/13更新:
现在改成用wepy来构建小程序了
- wepy中用@tap来代替微信小程序的bindtap,而且传参只能传入字符串值,因此(貌似)无法实现事件委托
- wx:for在wepy中要用
<repeat>
标签来表示,如<repeat for="{{navItems}}" key="idx" index="idx" item="item">
然后今天实现的是列表渲染的picker,初始化是筛选条件,在选中元素后改变为相应的值:
//wxml
<repeat for="{{navItems}}" key="idx" index="idx" item="item">
<picker mode="{{item.mode}}" value="{{item.value}}" start="{{item.start}}" end="{{item.end}}" bindchange="pickerChange" range="{{item.array}}" @tap="itemClick({{idx}})">
<view class="nav-body-item">{{item.title}}</view>
</picker>
</repeat>
//script
data = {
id:0,
navItems:[
{
value:'',
title:'按时间',
mode:'date',
start:'2018-05-01',
end:'2018-09-01',
array:[]
},
{
value:0,
title:'按学校',
mode:'selector',
start:'',
end:'',
array:['全部','中南大学','湖南大学','湖南师范大学']
},
{
value:0,
title:'按岗位',
mode:'selector',
start:'',
end:'',
array:['全部','技术/研发类','产品/项目类','市场类','设计类','职能类','内容编辑类','客户服务类']
},
{
value:0,
title:'按公司地点',
mode:'selector',
start:'',
end:'',
array:['全国','华东地区(山东、江苏、安徽、浙江、福建、上海)','华南(广东、广西、海南)','华中(湖北、湖南、河南、江西)','华北(北京、天津、河北、山西、内蒙古)','西北(宁夏、新疆、青海、陕西、甘肃)','西南(四川、云南、贵州、西藏、重庆)','东北(辽宁、吉林、黑龙江)','港澳台']
}
]
}
methods={
pickerChange(e){
this.navItems[this.id].value=e.detail.value
//改变当前picker的value,这样在第二次点击时会从第一次选择的值开始选
this.navItems[this.id].title=(e.detail.value-0)+''==='NaN'?e.detail.value:this.navItems[this.id].array[e.detail.value];
//判断当前是哪个picker,因为时间picker跟选择器picker不一样,value是当前选择的时间(string),普通选择器是number;e.detail.value-0会使string强制转化为number,后续使用+‘’来返回string是因为我们现在要判断(e.detail.value-0)是否为NaN,但是NaN不等于自身,所以要转化为string
},
itemClick(idx){//传入当前触发事件的idx
this.id=idx;
}
}