<checkbox-group bindchange="checkboxChange">
<view class='alarm-item' wx:for="{{alarms}}">
<checkbox class='check' checked="{{selectedAlarms}}.indexOf({{item.Id}})>0" value='{{item.Id}}'></checkbox>
<view class='alarm-item-data' data-id='{{item.Id}}' bindtap='getAlarmDetail'>
</view>
</view>
</checkbox-group>
有一个全选按钮 点击反选 可以把selectedAlarms 置空 但是checkbox为什么一直是选中状态?
好吧,非常感谢
点可以解析啊,但解析的是属性
indexOf是方法,是不能在模板里解析的,
已选的数量你另外定义一个变量不行吗?非得纠结这个。
{{selectedAlarms.length}}
变成对象了 这个就获取不到了,
还有就是.length原来是可以的,说明"."是可以解析的
var newselected = [];
应写作
var newselected = {};
测试了一下。
我猜测是模板引擎不支持这种语法的问题
模板引擎把 "." 后面的当作属性去解析,发现没这个属性,一直返回undefined
推荐你用对象保存已选数据的方法
<checkbox class=
'check'
checked=
"{{selectedAlarms[item.Id]}}"
value=
'{{item.Id}}'
><
/checkbox
>
if
(e.detail.value[0]) {
var newselected = [];
this.data.alarms.forEach(
function
(val) {
newselected[val.Id]=
true
;
});
this.setData({
selectedAlarms: newselected,
});
}
else
{
this.setData({
selectedAlarms: {},
});
}
部分代码。其它你按这个逻辑完善
<checkbox-group bindchange="checkboxChange">
<view class='alarm-item' wx:for="{{alarms}}">
<checkbox class='check' checked="{{selectedAlarms.indexOf(item.Id)>=0}}" value='{{item.Id}}'></checkbox>
<view class='alarm-item-data' data-id='{{item.Id}}' bindtap='getAlarmDetail'></view>
</view>
</checkbox-group>
<checkbox-group bindchange="checkAll">
<checkbox value='checkedAll' class='check'>
<label>全选</label>
<view>{{selectedAlarms.length}}</view>
</checkbox>
</checkbox-group>
checkAll: function (e) {
if (e.detail.value[0]){
var newselected=[];
this.data.alarms.forEach(function (val){
newselected.push(val.Id);
});
this.setData({
selectedAlarms: newselected,
});
}else
{
this.setData({
selectedAlarms: [],
});
}
},
checkboxChange: function (e) {
this.setData({
selectedAlarms: e.detail.value,
});
},
data: {
alarms: [],
selectedAlarms: [],
},
你帖代码出来看看
我改成>=0也还是一样啊
那你要检查代码的逻辑问题了
比如这个indexOf,匹配到的返回结果是 0~,匹配不到返回的是-1
你这里判断逻辑就有问题