收藏
回答

checkbox 数据绑定 问题

问题模块
API和组件

<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为什么一直是选中状态?

最后一次编辑于  2017-12-25  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

12 个回答

  • ¼
    ¼
    2017-12-26

    好吧,非常感谢

    2017-12-26
    赞同
    回复
  • 随心而去🍂Shirne'
    随心而去🍂Shirne'
    2017-12-26

    点可以解析啊,但解析的是属性

    indexOf是方法,是不能在模板里解析的,

    已选的数量你另外定义一个变量不行吗?非得纠结这个。


    2017-12-26
    赞同
    回复
  • ¼
    ¼
    2017-12-26

    {{selectedAlarms.length}}

    变成对象了 这个就获取不到了,


    还有就是.length原来是可以的,说明"."是可以解析的

    2017-12-26
    赞同
    回复
  • 随心而去🍂Shirne'
    随心而去🍂Shirne'
    2017-12-26

    var newselected = [];

    应写作

    var newselected = {};

    2017-12-26
    赞同
    回复
  • ¼
    ¼
    2017-12-25
    selectedAlarms 这个存不进去,在AppData里还是空的
    2017-12-25
    赞同
    回复
  • 随心而去🍂Shirne'
    随心而去🍂Shirne'
    2017-12-25

    测试了一下。

    我猜测是模板引擎不支持这种语法的问题

    模板引擎把 "." 后面的当作属性去解析,发现没这个属性,一直返回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: {},
          });
        }

    部分代码。其它你按这个逻辑完善

    2017-12-25
    赞同
    回复
  • ¼
    ¼
    2017-12-25

    <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: [],

    },




    2017-12-25
    赞同
    回复
  • 随心而去🍂Shirne'
    随心而去🍂Shirne'
    2017-12-25

    你帖代码出来看看

    2017-12-25
    赞同
    回复
  • ¼
    ¼
    2017-12-25

    我改成>=0也还是一样啊

    2017-12-25
    赞同
    回复
  • 随心而去🍂Shirne'
    随心而去🍂Shirne'
    2017-12-25

    那你要检查代码的逻辑问题了

    比如这个indexOf,匹配到的返回结果是 0~,匹配不到返回的是-1

    你这里判断逻辑就有问题

    2017-12-25
    赞同
    回复

正在加载...