参数说明
L.open('oFill')(node, data, argv)
将 data 按规则填充到 node 子节点中
nodeelement, array
填充的节点, 可以是数组节点
dataobject
匹配数据
argvelement, array
配置参数 { "bind" : 指定依照的属性值, 数组, 默认=["-data", "name"] "mark" : 锚点注释, 字符串, 默认="-data", 如: <!---data=bind--> "call" : 绑定回调, 默认无 { "fill" : 填充数据时回调 { 绑定值 : 回调函数, 返回false停止默认匹配, this=结构 { "type" : 触发类型 "bind" : 当前匹配键 "data" : 传入的匹配数据 "argv" : 匹配参数 "value" : 当前匹配值(回调中可修改) "node" : 匹配的节点 } }, "each" : 遍历数据时回调 { 绑定值 : 回调函数, 返回false停止默认匹配, this=结构 { "type" : 触发类型 "bind" : 当前匹配键 "data" : 传入的匹配数据 "argv" : 匹配参数 "value" : 当前匹配值(回调中可修改) "node" : 匹配的节点, 可修改(单标签或注释时将依次将模版加入上方) "tmpl" : 遍历模版, 可修改(模版包在一个标签中) } } } }
集成演示
<!--- 默认匹配规则 : - 选框 : 相同值设置选中状态 - 图片 : 设置src - 表单 : 设置value值 - 其它 : 设置text值 - 自动循环 : 当绑定值为数组, 0元素为对象时, 遍历数据并克隆子元素, 如: { - 绑定 : [ - {xxx: yyy, ...}, - ... - ] - } --> <div id="li"> <span -data="aa"></span> <div name="bb"></div> <div name="cc"> <span name="dd"></span> </div> <input type="radio" name="ee" value="1"> <input type="radio" name="ee" value="2"> <select multiple="multiple" name="ff"> <option>Multiple</option> <option value="aa">Multiple2</option> <option selected="selected">Multiple3</option> </select> <ul name="ul"> <li name="li"> <ul -data="each"> <li name="item"> <img name="img" width="50px"> </li> </ul> </li> </ul> <select name="zz"> <option>默认</option> <option name="aazz">aa</option> </select> <textarea name="gg" id="" cols="30" rows="2"></textarea> <br> <!---data=hh --> </div> <script> var activities = { "aa" : "-data填充aa", //"-data" 绑定 "aa" "bb" : "name填充bb", //"name" 绑定 "bb" "cc" : { //<font color="red">"cc" 中的 "bb" 也会被父同名 填充, 但优先级低</font> "dd" : "深度填充dd" //深度绑定 dd }, "ee" : 2, //选择单选框或复选框, 不判断类型 "ff" : ["Multiple", "aa"], //选择多选列表 "gg" : "文本域填充", //文本域填充 "hh" : "锚点注释填充", "ul" : [ //遍历绑定, 会触发 each 事件 { "li" : "覆盖填充" //克隆ul子节点, 向[name=li]的text赋值 }, { "img" : "a.jpg" //克隆ul子节点, 向[name=img]的src赋值 }, { "each" : [ //克隆ul子节点后, 继续克隆[-data="each"]的子节点 {"item" : 1}, //克隆 each 子节点, 向[name="item"]的text赋值 {"item" : 2}, //克隆 each 子节点, 向[name="item"]的text赋值 ] } ], 'yy' : [ //不存在数据处理 {"aazz" : '创建div1'}, {"aazz" : '创建div2'} ], 'zz' : [ //保留默认值回调 {"aazz" : 1}, {"aazz" : 2} ] }; L.open('oFill')(document.getElementById("li"), activities, { "call" : { "fill" : { "item" : function () { //[name="item"]填充时触发回调 this.value += 1; //修改填充值 } }, "each" : { "ul" : function () { //[name=ul]遍历开始时触发, 添加"默认"标签 $(this.node).append('<li>添加默认值</li>'); }, "yy" : function () { //创建模板 this.node = $('<!-- test -->').appendTo(document.body).get(0); this.tmpl = $('<div><div name="aazz"></div></div>').get(0); }, "zz" : function () { //修改模板 $(':eq(0)', this.tmpl).appendTo(this.node); } } } }); </script>