javascript使用avalon绑定实现checkbox全选


Posted in Javascript onMay 06, 2015

duplex双工绑定是avalon绑定里面最有趣的一个,因为它在内部帮开发者做了很多事,让开发者写的代码减少,代码更优雅。下面随便演示一个常见的checkbox全选。

要求:(老掉牙了,还是说一下)

1.勾选了全选框后,下面的子选框全被勾选;没勾选全选框,则子选框全部不勾选

2.子选框如果有一个未勾选,则取消全选框勾选;

3.子选框全部勾选,则勾选全选框

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style type="text/css">
  *{
    margin: 0;
    padding: 0;
  }
  #wrap{
    margin-left: 100px;
  }
  #wrap li{
    display: inline-block;
    *display: inline;
    zoom:1;
    vertical-align: middle;
  }
</style>
<script type="text/javascript" src='seed.js'></script>
</head>
<body>
  <div id='wrap' ms-controller='duplex'>
    <p><input type='checkbox' data-duplex-changed="select_all_cb" ms-duplex-checked='select_all'>全选</p>
    <ul>
      <li ms-repeat='list'>
        <input type='checkbox' ms-duplex-number="selected" ms-attr-value='el.id'>{{el.text}}
      </li>
    </ul>
    <p>选中项的id:{{selected}}</p>
  </div>
  <script type="text/javascript">
  require('avalon',function(avalon){
    var duplex=avalon.define('duplex',function(vm){
      vm.selected=[];//保存勾选的选项的id,方便传给后台
      vm.list=[{id:1,text:'aaa'},{id:2,text:'bbb'},{id:3,text:'ccc'},{id:4,text:'ddd'},{id:5,text:'eee'},{id:6,text:'fff'}];
      vm.select_all_cb=function(){//全选框change事件回调
        var list=duplex.list,selected=duplex.selected;
        if(this.checked){
          avalon.each(list,function(i,v){//循环保存着已经勾选选框的数据
            selected.ensure(v['id']);//如果里面没有当前选框的数据,就保存
          });
        }else
          selected.clear();//清空
      };
      vm.select_all=0;
    });
    duplex.selected.$watch('length',function(after){//监听保存数据数组的变化
      var len=duplex.list.length;      
      if(after==len)//子选框全部被勾选
        duplex.select_all=1;
      else//子选框有一个没有被勾选
        duplex.select_all=0;
    });
    avalon.scan();
  });
  </script>
</body>
</html>

效果

javascript使用avalon绑定实现checkbox全选

需要说明几点:

1.data-duplex-changed负责监听checkbox的变化,进而触发回调。

2.ms-duplex-number="selected"这个就是神器,selected数组是和子选项框同步的,互相影响。也就是说,selected数组的元素个数增加或减少,会更新相应子选项框的视图,反之亦然。

3.ms-duplex-*需要与checkbox value属性值的类型相同,否则无法同步视图。像这里,checkbox value值是数字,则用ms-duplex-number。

4.checkbox value属性值的类型有时不要想当然的去判定。本?啪陀龅焦??髅鞔雍筇ù??吹氖?d数字,却无法同步视图,最后改成ms-duplex-string才解决问题。所以'7'还是7,要判断清楚。

从这个小例子可以看到用avalon这类mvvc是多么的提升编码体验,如果不用,想想要写多少个for循环+if判断!

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
css图片自适应大小
Nov 28 Javascript
document.onreadystatechange事件的用法分析
Oct 17 Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
js 自制滚动条的小例子
Mar 16 Javascript
jQuery中siblings()方法用法实例
Jan 08 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
Mar 02 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
js实现滑动触屏事件监听的方法
May 05 #Javascript
JS根据生日算年龄的方法
May 05 #Javascript
js改变Iframe中Src的方法
May 05 #Javascript
js网页滚动条滚动事件实例分析
May 05 #Javascript
jquery判断单选按钮radio是否选中的方法
May 05 #Javascript
JQuery中Bind()事件用法分析
May 05 #Javascript
JS判断字符串包含的方法
May 05 #Javascript
You might like
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
2013/06/06 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
php源码的使用方法讲解
2019/09/26 PHP
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
浅析Python中的多进程与多线程的使用
2015/04/07 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
XML文档面试题
2015/08/05 面试题
linux面试题参考答案(2)
2015/12/06 面试题
单位办理社保介绍信
2014/01/10 职场文书
六查六看自查材料
2014/02/17 职场文书
抄作业检讨书
2014/02/17 职场文书
如何写求职信
2014/05/24 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2014年减负工作总结
2014/12/10 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书