zoukankan      html  css  js  c++  java
  • 关于动态生成data组件

    /*! 
    * WeX5 v3 (http://www.justep.com) 
    * Copyright 2015 Justep, Inc.
    * Licensed under Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) 
    * 文件名:demo.js
    */ 
    define(function(require) {
        var $ = require("jquery");
        var bind = require("bind");
        var Data = require("../data");
        var BizData = require("../bizData");
        var Input = require("../../input/input");
        var Output = require("../../output/output");
        var Textarea = require("../../textarea/textarea");
    
        // 增加自定义规则
        Data.Rules.add('isExistStr', {
            // val:校验的值,params:规则给出的参数,ctx:当前的上下文,包含source(对应的data),rowid(行id),col(列名)
            validator : function(val, params, ctx) {
                var ret = false;
                if ('string' === typeof (val)) {
                    ret = val.indexOf(params) > -1;
                }
                return ret;
            },
            message : '必须包含字符 {0}'
        });
    
        var Model = function() {
            this.callParent();
    
            this.mainData = new Data(this, {
                xid : 'mainData',
                defCols : {
                    SA_Task : {
                        type : 'String',
                        label : 'ID'
                    },
                    sName : {
                        type : 'String',
                        label : '名字',
                        rules : {
                            required : {
                                params : true,
                                message : '名字必须有值'
                            }
                        }
                    },
                    sAge : {
                        type : 'Integer',
                        label : '年龄'
                    /*
                     * , rules :{ min: {params:18, message:'年龄必须大于等于18' }, max:
                     * {params:50, message:'年龄必须小于等于50' }}
                     */
                    },
                    sAmt : {
                        type : 'Double',
                        label : '合计',
                        relation : 'EXPRESS',
                        calculate : "js:$model.slaveData?$model.slaveData.Sum('sAmt',$row):0"
                    }
                },
                idColumn : 'SA_Task'
            });
    
            this.mainData.ageAvg = bind.computed(function() {
                var ret = this.mainData.Avg('sAge');
                return ret;
            }, this).extend({
                mustEqual : 30
            });
    
            this.mainData.amtSum = bind.computed(function() {
                var ret = this.mainData.Sum('sAmt');
                return ret;
            }, this).extend({
                mustEqual : 50
            });
    
            this.slaveData = new Data(this, {
                xid : 'slaveData',
                defCols : {
                    SA_Task_Info : {
                        type : 'String',
                        label : '任务明细'
                    },
                    SA_Task : {
                        type : 'String',
                        label : '主ID'
                    },
                    sName : {
                        type : 'String',
                        label : '名字'
                    },
                    sInfo : {
                        type : 'String',
                        label : '说明'
                    },
                    sCount : {
                        type : 'Integer',
                        label : '数量',
                        rules : {
                            required : {
                                params : true,
                                message : '数量必须有值'
                            },
                            integer : {
                                params : true,
                                message : '数量无效'
                            }
                        }
                    },
                    sUnitprice : {
                        type : 'Double',
                        label : '单价',
                        rules : {
                            required : {
                                params : true,
                                message : '单价必须有值'
                            },
                            number : {
                                params : true,
                                message : '单价无效'
                            }
                        }
                    },
                    sAmt : {
                        type : 'Double',
                        label : '合计',
                        relation : 'EXPRESS',
                        rules : {
                            calculate : "js:val('sCount') * val('sUnitprice')"
                        }
                    }
                },
                idColumn : 'SA_Task_Info',
                master : {
                    xid : 'mainData',
                    relation : 'SA_Task'
                }
            });
    
            this.bizDataReadonly = bind.observable(false);// 控制整个data的只读
            this.bizData = new BizData(this, {
                xid : 'bizData',
                readonly : "js:$model.bizDataReadonly.get()",
                defCols : {
                    DEMO_TABLE1 : {
                        type : 'String',
                        relation : 'DEMO_TABLE1',
                        label : 'DEMO_TABLE1'
                    },
                    fString : {
                        type : 'String',
                        relation : 'DEMO_TABLE1.fString',
                        label : 'fString',
                        // 上下文包括{$model:this.getModel(),$data:this,$row:r,$val,$rowID:rowid,$col:col}
                        rules : {
                            readonly : "js:500<val('fInteger')",
                            required : {
                                params : true,
                                message : 'fString必须有值'
                            },
                            isExistStr : 'abc',
                            constraint : {
                                params : {
                                    expr : "js:$val.indexOf(val('fInteger'))>-1"
                                },
                                message : '通用规则,必须包含fInteger'
                            }
                        }
                    },
                    fInteger : {
                        type : 'Integer',
                        relation : 'DEMO_TABLE1.fInteger',
                        label : 'fInteger',
                        rules : {
                            required : {
                                params : true,
                                message : 'fInteger必须有值'
                            },
                            number : {
                                params : true,
                                message : 'fInteger无效'
                            }
                        }
                    },
                    fFloat : {
                        type : 'Float',
                        relation : 'DEMO_TABLE1.fFloat',
                        label : 'fFloat',
                        rules : {
                            number : {
                                params : true,
                                message : 'fFloat无效'
                            }
                        }
                    },
                    fDecimal : {
                        type : 'Decimal',
                        relation : 'DEMO_TABLE1.fDecimal',
                        label : 'fDecimal'
                    },
                    fDate : {
                        type : 'Date',
                        label : 'fDate',
                        relation : 'DEMO_TABLE1.fDate'
                    },
                    fDateTime : {
                        type : 'DateTime',
                        label : 'fDateTime',
                        relation : 'DEMO_TABLE1.fDateTime'
                    },
                    fTime : {
                        type : 'Time',
                        label : 'fTime',
                        relation : 'DEMO_TABLE1.fTime'
                    },
                    fText : {
                        type : 'Text',
                        label : 'fText',
                        relation : 'DEMO_TABLE1.fText'
                    },
                    version : {
                        type : 'Integer',
                        label : 'version',
                        relation : 'DEMO_TABLE1.version'
                    }
                },
                idColumn : 'DEMO_TABLE1',
                dataModel : '/demo/components/data',
                queryAction : 'queryDEMO_TABLE1Action',
                newAction : 'createDEMO_TABLE1Action',
                saveAction : 'saveDEMO_TABLE1Action',
                limit : 5,
                autoLoad : true
            });
    
            var self = this;
            this.bizChanged = bind.observable(false);
            this.bizData.on("onDataChange", function(event) {
                self.bizChanged.set(event.source.isChanged());
            });
            this.bizData.on("onSaveCommit", function(event) {
                self.bizChanged.set(event.source.isChanged());
            });
    
            this.bizDataDirectDelete = bind.observable(this.bizData.directDeleteMode);
            this.bizDataDirectDelete.subscribe(function(v) {
                self.bizData.directDeleteMode = v;
            });
            this.bizDataDeleteConfirm = bind.observable(this.bizData.deleteConfirm);
            this.bizDataDeleteConfirm.subscribe(function(v) {
                self.bizData.deleteConfirm = v;
            });
    
            this.input6Render = function(event) {
                event.text = event.value == '1' ? '男' : '女';
            };
            this.output6Render = function(event) {
                event.html = event.value == '1' ? '男' : '<span>output组件输出html:</span><input type="button" value="' + event.value + '"/>';
            };
            this.createInput = function() {
                var parent = this.getElementByXid("create-input");
                if (parent) {
                    var cfg = {
                        'bind-ref' : "bizData1.ref('fDateTime')",
                        format : "yyyy-MM-dd hh:mm",
                        parentNode : parent
                    };
                    new Input(cfg);
                } else
                    alert('error');
            };
            this.createOutput = function() {
                var parent = this.getElementByXid("create-output");
                if (parent) {
                    var cfg = {
                        'bind-ref' : "bizData1.ref('fText')",
                        parentNode : parent
                    };
                    new Output(cfg);
                } else
                    alert('error');
            };
            this.createTextarea = function() {
                var parent = this.getElementByXid("create-output");
                if (parent) {
                    var cfg = {
                        'bind-ref' : "bizData1.ref('fText')",
                        parentNode : parent
                    };
                    new Textarea(cfg);
                } else
                    alert('error');
            };
    
        };
    
        Model.prototype.mainDataNew = function(defaultValue) {
            defaultValue = defaultValue || {};
            this.mainData.newData({
                defaultValues : [ {
                    SA_Task : defaultValue['SA_Task'] || Data.UUID(),
                    sName : defaultValue['sName'] || '',
                    sAge : defaultValue['sAge'] || (Math.round(Math.random() * 40) + 20)
                } ]
            });
        };
    
        Model.prototype.slaveDataNew = function(defaultValue) {
            defaultValue = defaultValue || {};
            this.slaveData.newData({
                defaultValues : [ {
                    SA_Task_Info : defaultValue['SA_Task_Info'] || Data.UUID(),
                    sName : defaultValue['sName'] || (this.mainData.getValue('sName') + '---' + this.slaveData.getCount()),
                    sCount : defaultValue['sCount'] || (Math.round(Math.random() * 150) + 30),
                    sUnitprice : defaultValue['sUnitprice'] || (Math.round(Math.random() * 200) * 0.5),
                    sInfo : defaultValue['sInfo'] || "无"
                } ]
            });
        };
    
        Model.prototype.test = function() {
            // 测试applyBindings速度
            var t = "<div><label data-bind="text:bizData.label('fString')"></label><input data-bind="value:bizData.ref('fString')" /></div><div><label data-bind="text:bizData.label('fInteger')"></label><input data-bind="value:bizData.ref('fInteger')" /></div><div><label data-bind="text:bizData.label('fFloat')"></label><input data-bind="value:bizData.ref('fFloat')" /></div><div><label data-bind="text:bizData.label('fDecimal')"></label><input data-bind="value:bizData.ref('fDecimal')" /></div><div><label data-bind="text:bizData.label('fDateTime')"></label><input data-bind="value:bizData.ref('fDateTime')" /></div><div><label data-bind="text:bizData.label('fText')"></label><input data-bind="value:bizData.ref('fText')" /></div><div><label data-bind="text:bizData.label('fTime')"></label><input data-bind="value:bizData.ref('fTime')" /></div>";
            var tt = "";
            for ( var i = 0; i < 200; i++)
                // 创建200行数据
                tt = tt + t;
            $('.tr').append("<td class='td1'>" + tt + "</td>");
            var b1 = new Date();
            bind.applyBindings(this, $('.td1')[0]);
            alert("applyBindings:" + ((new Date()).getTime() - b1.getTime()));
        };
    
        Model.prototype.bizData1DataChange = function(event) {
            alert('bizData1DataChange');
        };
    
        return Model;
    });
    demo.w
    
    <?xml version="1.0" encoding="utf-8"?>
    
    <div xmlns="http://www.w3.org/1999/xhtml" component="$UI/system/components/justep/window/window">  
      <div component="$UI/system/components/justep/model/model" xid="model"> 
        <div component="$UI/system/components/justep/data/bizData" xid="bizData1" autoLoad="true"
          concept="DEMO_TABLE1" columns="version,fString,fInteger,fFloat,fDecimal,fDate,fDateTime,fTime,fText"
          limit="2" onDataChange="bizData1DataChange"> 
          <reader action="/demo/components/logic/action/queryDEMO_TABLE1Action"/>  
          <writer action="/demo/components/logic/action/saveDEMO_TABLE1Action"/>  
          <creator action="/demo/components/logic/action/createDEMO_TABLE1Action"/>  
          <calculateRelation relation="calcCheckBox"/>  
          <calculateRelation relation="recNO" type="Integer"/>  
          <rule> 
            <readonly> 
              <expr><![CDATA[]]></expr> 
            </readonly>  
            <col name="fString"> 
              <readonly>
                <expr><![CDATA[js:1000<val('fInteger')]]></expr>
              </readonly>  
              <calculate>
                <expr/>
              </calculate>  
              <constraint>
                <expr><![CDATA[js:$val.indexOf(val('fInteger'))<0]]></expr>  
                <message xid="default1"><![CDATA[]]></message>
              </constraint>  
              <required>
                <expr><![CDATA[js:true]]></expr>
              </required> 
            </col> 
          </rule> 
        </div>  
        <div component="$UI/system/components/justep/data/bizData" xid="selectData" autoLoad="true"
          concept="DEMO_TABLE1" columns="fString,fInteger,fFloat,fDecimal,fDate,fDateTime,fTime,fText"
          limit="5"> 
          <reader action="/demo/components/logic/action/queryDEMO_TABLE1Action"/>  
        </div>  
        <div component="$UI/system/components/justep/data/data" xid="data1" idColumn="fName">
          <column name="fName" type="String" label="显示名称"/>
          <column name="fAge" type="Integer" label="年龄"/>
          <rule xid="rule1"/>
          <data><![CDATA[
          [{fName:'abc',fAge:18},{fName:'test',fAge:28}]
          ]]></data>
        </div>
      </div>  
      <div> 
        <h1>Data,BizData Component Demo</h1>  
        <h3>Data组件</h3>  
        <div> 
          <table> 
            <tr valign="top"> 
              <td> 
                <div>主当前行:</div>  
                <div> 
                  <label bind-text="mainData.label('sName')"/>  
                  <input bind-value="mainData.ref('sName')" bind-validation="mainData.ref('sName')"/> 
                </div>  
                <div> 
                  <label bind-text="mainData.label('sAge')"/>  
                  <input bind-value="mainData.ref('sAge')"/> 
                </div>  
                <div> 
                  <label bind-text="mainData.label('sAmt')"/>  
                  <input bind-value="mainData.ref('sAmt')"/> 
                </div>  
                <div> 
                  <span>平均年龄:</span>  
                  <span bind-text="mainData.ageAvg" id="span2"/> 
                </div>  
                <div> 
                  <span>总价格:</span>  
                  <span bind-text="mainData.amtSum" id="span3"/> 
                </div>  
                <div> 
                  <span>修改状态:</span>  
                  <span bind-text="mainData.isChanged()" id="span3"/> 
                </div> 
              </td>  
              <td> 
                <div>主数据:</div>  
                <div> 
                  <input bind-click="mainDataNew" type="button" value="new"
                    id="input6" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.deleteData)" type="button"
                    value="del" id="input6-1" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.tojson)" type="button"
                    value="getJson" id="input7" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.first)" type="button"
                    value="&lt;&lt;" id="input8" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.pre)" type="button"
                    value="&lt;" id="input9" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.next)" type="button"
                    value="&gt;" id="input11" class="btn btn-info"/>  
                  <input bind-click="call(mainData,mainData.last)" type="button"
                    value="&gt;&gt;" id="input12" class="btn btn-info"/> 
                </div>  
                <ul bind-foreach="mainData.datas"> 
                  <li bind-css="{ curRow: $model.mainData.currentRow.get() == $object }"> 
                    <div> 
                      <label bind-text="label('sName')"/>  
                      <input bind-value="ref('sName')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sAge')"/>  
                      <input bind-value="ref('sAge')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sAmt')"/>  
                      <input bind-value="ref('sAmt')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('SA_Task')"/>  
                      <span bind-text="ref('SA_Task')"/> 
                    </div> 
                  </li> 
                </ul> 
              </td>  
              <td> 
                <div>从数据:</div>  
                <div> 
                  <input bind-click="slaveDataNew" type="button" value="new"
                    id="input6-1" class="btn btn-info"/>  
                  <input bind-click="call(slaveData,slaveData.deleteData)" type="button"
                    value="del" id="input6-2" class="btn btn-info"/>  
                  <input bind-click="call(slaveData,slaveData.first)" type="button"
                    value="&lt;&lt;" id="input8-1" class="btn btn-info"/>  
                  <input bind-click="call(slaveData,slaveData.pre)" type="button"
                    value="&lt;" id="input9-1" class="btn btn-info"/>  
                  <input bind-click="call(slaveData,slaveData.next)" type="button"
                    value="&gt;" id="input11-1" class="btn btn-info"/>  
                  <input bind-click="call(slaveData,slaveData.last)" type="button"
                    value="&gt;&gt;" id="input12-1" class="btn btn-info"/> 
                </div>  
                <ul bind-foreach="slaveData.datas"> 
                  <li bind-css="{ curRow: $model.slaveData.currentRow.get() == $object}"> 
                    <div> 
                      <label bind-text="label('sName')"/>  
                      <input bind-value="ref('sName')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sCount')"/>  
                      <input bind-value="ref('sCount')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sUnitprice')"/>  
                      <input bind-value="ref('sUnitprice')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sAmt')"/>  
                      <input bind-value="ref('sAmt')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('sInfo')"/>  
                      <input bind-value="ref('sInfo')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('SA_Task_Info')"/>  
                      <span bind-text="ref('SA_Task_Info')"/> 
                    </div>  
                    <div> 
                      <label bind-text="label('SA_Task')"/>  
                      <span bind-text="ref('SA_Task')"/> 
                    </div> 
                  </li> 
                </ul> 
              </td>  
              <td> 
                <div> 
                  <label bind-text="slaveData.label('sName')"/>  
                  <input bind-value="slaveData.ref('sName')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('sCount')"/>  
                  <input bind-value="slaveData.ref('sCount')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('sUnitprice')"/>  
                  <input bind-value="slaveData.ref('sUnitprice')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('sAmt')"/>  
                  <input bind-value="slaveData.ref('sAmt')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('sInfo')"/>  
                  <input bind-value="slaveData.ref('sInfo')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('SA_Task_Info')"/>  
                  <span bind-text="slaveData.ref('SA_Task_Info')"/> 
                </div>  
                <div> 
                  <label bind-text="slaveData.label('SA_Task')"/>  
                  <span bind-text="slaveData.ref('SA_Task')"/> 
                </div> 
              </td> 
            </tr> 
          </table>  
          <p bind-text="mainData.getInvalidInfo()"/>  
          <p bind-text="slaveData.getInvalidInfo()"/> 
        </div>  
        <h3>BizData组件</h3>  
        <div> 
          <label>数据约束规则</label>  
          <label>fString:</label>  
          <label>1、必须有值</label>  
          <label>2、必须包含字符串'abc'</label>  
          <label>3、必须包含fInteger</label>  
          <label>fInteger:</label>  
          <label>1、必须有值</label>  
          <label>2、必须是数字</label>  
          <label>数据只读规则</label>  
          <label>当fInteger大于500时fString只读</label> 
        </div>  
        <div> 
          <span>修改状态:</span>  
          <span bind-text="bizChanged"/>  
          <span>校验状态:</span>  
          <span bind-text="bizData.isValid()"/>  
          <span>记录数:</span>  
          <span bind-text="bizData.getCount()"/> 
        </div>  
        <div> 
          <span>直接删除:</span>  
          <input type="checkbox" bind-checked="bizDataDirectDelete"/>  
          <span>,删除提示:</span>  
          <input type="checkbox" bind-checked="bizDataDeleteConfirm"/>  
          <span>,data只读:</span>  
          <input type="checkbox" bind-checked="bizDataReadonly"/> 
        </div>  
        <div> 
          <input bind-click="call(bizData,bizData.newData)" type="button" value="New"
            class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.refreshData)" type="button"
            value="Refresh" class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.deleteData)" type="button"
            value="Del" class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.saveData)" type="button" value="Save"
            class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.first)" type="button" value="&lt;&lt;"
            class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.pre)" type="button" value="&lt;"
            class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.next)" type="button" value="&gt;"
            class="btn btn-info"/>  
          <input bind-click="call(bizData,bizData.last)" type="button" value="&gt;&gt;"
            class="btn btn-info"/>  
          <input bind-click="test" type="button" value="test" class="btn btn-info"/> 
        </div>  
        <table> 
          <tr valign="top" class="tr"> 
            <td id="td"> 
              <ul bind-foreach="bizData.datas"> 
                <li bind-css="{ curRow:$model.bizData.currentRow.get() == $object }"> 
                  <div> 
                    <label bind-text="label('fString')"/>  
                    <input bind-value="ref('fString')" bind-validation="ref('fString')" bind-readonly="ref('fString')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fInteger')"/>  
                    <input bind-value="ref('fInteger')" bind-validation="ref('fInteger')" bind-readonly="ref('fInteger')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fFloat')"/>  
                    <input bind-value="ref('fFloat')" bind-readonly="ref('fFloat')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fDecimal')"/>  
                    <input bind-value="ref('fDecimal')" bind-readonly="ref('fDecimal')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fDateTime')"/>  
                    <input bind-value="ref('fDateTime')" bind-readonly="ref('fDateTime')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fText')"/>  
                    <input bind-value="ref('fText')" bind-readonly="ref('fText')"/> 
                  </div>  
                  <div> 
                    <label bind-text="label('fTime')"/>  
                    <input bind-value="ref('fTime')" bind-readonly="ref('fTime')"/> 
                  </div> 
                </li> 
              </ul> 
            </td>  
            <td> 
              <div>当前行:</div>  
              <div> 
                <label bind-text="bizData.label('fString')"/>  
                <input class="form-control String" bind-value="bizData.ref('fString')" bind-validation="bizData.ref('fString')" bind-readonly="bizData.ref('fString')"/>  
                <!-- 
                             -->  
                <!--
                        <input component="$UI/system/components/input/input" config='{"width":160,"placeHolder":"请输入字符串"}'
                            xid="input1" bind-ref="bizData.ref('fString')">
                            <input/>
                            <div xid="search">
                                <img style="16px; height:22px" src="$UI/system/components/input/img/datePicker.gif"></img>
                            </div>
                        </div>
                        --> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fInteger')"/>  
                <input bind-value="bizData.ref('fInteger')" bind-validation="bizData.ref('fInteger')" bind-readonly="bizData.ref('fInteger')"/>  
                <!-- 
                             --> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fFloat')"/>  
                <input bind-value="bizData.ref('fFloat')" bind-readonly="bizData.ref('fFloat')"/> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fDecimal')"/>  
                <input bind-value="bizData.ref('fDecimal')" bind-readonly="bizData.ref('fDecimal')"/> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fDateTime')"/>  
                <input bind-value="bizData.ref('fDateTime')" bind-readonly="bizData.ref('fDateTime')"/> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fText')"/>  
                <input bind-value="bizData.ref('fText')" bind-readonly="bizData.ref('fText')"/> 
              </div>  
              <div> 
                <label bind-text="bizData.label('fTime')"/>  
                <input bind-value="bizData.ref('fTime')" bind-readonly="bizData.ref('fTime')"/> 
              </div> 
            </td> 
          </tr> 
        </table>  
        <h3>描述的BizData组件</h3>  
        <div> 
          <a component="$UI/system/components/justep/button/button" class="btn btn-info btn-icon-left" onClick="{operation:'bizData1.new'}">
          <i/><span></span>
          </a>  
          <a onClick="{operation:'bizData1.refresh'}" component="$UI/system/components/justep/button/button"
            class="btn btn-info btn-icon-left">
          <i/><span></span>
          </a>  
          <a onClick="{params:{ids:'js:$m.ids'},operation:'bizData1.delete'}" component="$UI/system/components/justep/button/button"
            class="btn btn-info btn-icon-left">
          <i/><span></span>
          </a>  
          <a onClick="{operation:'bizData1.save'}" component="$UI/system/components/justep/button/button"
            class="btn btn-info btn-icon-left">
          <i/><span></span>
          </a>  
          <a onClick="createInput" component="$UI/system/components/justep/button/button"
            label="createInput" class="btn btn-info">
          <i/><span>createInput</span>
          </a>  
          <a onClick="createOutput" component="$UI/system/components/justep/button/button"
            label="createOutput" class="btn btn-info">
          <i/><span>createOutput</span>
          </a>  
          <a onClick="createTextarea" component="$UI/system/components/justep/button/button"
            label="createTextarea" class="btn btn-info">
          <i/><span>createTextarea</span>
          </a>  
          <a onClick="{operation:'bizData1.firstRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left">
          <i/><span></span>
          </a>  
          <a component="$UI/system/components/justep/button/button"
            class="btn btn-info btn-icon-left" onClick="{operation:'bizData1.prevRow'}">
          <i/><span></span>
          </a>  
          <a component="$UI/system/components/justep/button/button"
            class="btn btn-info btn-icon-right" onClick="{operation:'bizData1.nextRow'}">
          <i/><span></span>
          </a>  
          <a onClick="{operation:'bizData1.lastRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-right">
          <i/><span></span>
          </a> 
        </div>  
        <div>当前行:</div>  
        <div> 
          <label bind-text="bizData1.label('fString')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入字符串"
            style="300px" xid="input1" class="form-control" data="bizData1" bind-ref="bizData1.ref('fString')"/>  
          <input component="$UI/system/components/justep/input/password" placeHolder="请输入字符串"
            style="300px" xid="input1-pw" class="form-control" data="bizData1" bind-ref="bizData1.ref('fString')"/>  
          <span style="display: block;" component="$UI/system/components/justep/button/checkbox"
            class="x-checkbox" name="checkbox" value="1" label="选项----1" bind-ref="bizData1.ref('fString')"/>  
          <span component="$UI/system/components/justep/button/toggle" class="x-toggle"
            type="checkbox" name="checkbox1" value="1" ON="开" OFF="关" bind-ref="bizData1.ref('fString')"/>  
          <div component="$UI/system/components/justep/select/radioGroup" class="x-radio-group"
            _vertical="true" name="r" bind-itemset="selectData" bind-itemsetValue="ref('fString')"
            bind-itemsetLabel="ref('fString')" bind-ref="bizData1.ref('fString')"/> 
        </div>  
        <div> 
          <label bind-text="bizData1.label('fInteger')"/>  
          <input component="$UI/system/components/justep/input/range" xid="input2" 
            min="1" max="10000" data="bizData1" bind-ref="bizData1.ref('fInteger')"/> 
        </div>  
        <div> 
          <label bind-text="bizData1.label('fFloat')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入数值"
            xid="input3" class="form-control" data="bizData1" bind-ref="bizData1.ref('fFloat')"/> 
        </div>  
        <div> 
          <label bind-text="bizData1.label('fDecimal')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入数值"
            xid="input4" class="form-control" data="bizData1" bind-ref="bizData1.ref('fDecimal')"/> 
        </div>  
        <div xid="create-input"> 
          <label bind-text="bizData1.label('fDateTime')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入日期时间"
            xid="input5" class="form-control" data="bizData1" format="yy-MM-dd hh:mm" bind-ref="bizData1.ref('fDateTime')"/> 
        </div>  
        <div xid="create-output"> 
          <label bind-text="bizData1.label('fText')"/>  
          <select class="form-control" component="$UI/system/components/justep/select/select" bind-ref="bizData1.ref('fText')" bind-labelRef="bizData1.ref('fString')"
            bind-options="selectData" bind-optionsLabel="fString" bind-optionsValue="DEMO_TABLE1"
            bind-optionsCaption="请选择..."/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入text"
            xid="input6" class="form-control" data="bizData1" bind-ref="bizData1.ref('fText')"
            onRender="input6Render"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入text"
            xid="input6-1" class="form-control" data="bizData1" bind-ref="bizData1.ref('fText')"/>  
          <span component="$UI/system/components/justep/button/checkbox" class="x-checkbox" bind-ref="bizData1.ref('fText')" label="选项----1"></span>
          <div component="$UI/system/components/justep/select/checkboxGroup" class="x-checkbox-group" 
            name="c" bind-itemset="selectData" bind-itemsetValue="ref('DEMO_TABLE1')"
            bind-itemsetLabel="ref('fString')" bind-ref="bizData1.ref('fText')"/> 
        </div>  
        <div> 
          <label bind-text="bizData1.label('fTime')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入时间"
            xid="input7" class="form-control" data="bizData1" bind-ref="bizData1.ref('fTime')"/> 
        </div>  
        <ul bind-foreach="bizData1.datas"> 
          <li bind-css="{ curRow:     $model.bizData1.currentRow.get() == $object }"> 
            <div> 
              <label bind-text="label('fString')"/>  
              <input component="$UI/system/components/justep/input/input" placeHolder="请输入字符串"
                xid="input1-1" class="form-control" data="bizData1" bind-ref="ref('fString')"/>  
              <span style="display: block;" component="$UI/system/components/justep/button/checkbox"
                class="x-checkbox" value="1" label="选项----1" bind-ref="ref('fString')"/>  
              <span component="$UI/system/components/justep/button/toggle" class="x-toggle"
                type="checkbox" value="1" ON="开" OFF="关" bind-ref="ref('fString')"/> 
            </div>  
            <div> 
              <label bind-text="label('fInteger')"/>  
              <input component="$UI/system/components/justep/input/input" xid="input2-1"
                class="form-control" data="bizData1" bind-ref="ref('fInteger')"/> 
            </div>  
            <div> 
              <label bind-text="label('fFloat')"/>  
              <input component="$UI/system/components/justep/input/input" xid="input3-1"
                class="form-control" data="bizData1" bind-ref="ref('fFloat')"/> 
            </div>  
            <div> 
              <label bind-text="label('fDecimal')"/>  
              <input component="$UI/system/components/justep/input/input" xid="input3-1"
                class="form-control" data="bizData1" bind-ref="ref('fDecimal')"/> 
            </div>  
            <div> 
              <label bind-text="label('fDateTime')"/>  
              <input component="$UI/system/components/justep/input/input" placeHolder="请输入日期时间"
                xid="input5-1" class="form-control" data="bizData1" format="yyyy-MM-dd hh:mm"
                bind-ref="ref('fDateTime')"/>  
              <div component="$UI/system/components/justep/output/output" placeHolder="请输入日期时间"
                xid="output5-1" class="x-output" data="bizData1" format="yyyy-MM-dd hh:mm"
                bind-ref="ref('fDateTime')"/> 
            </div>  
            <div> 
              <label bind-text="label('fText')"/>  
          <div component="$UI/system/components/justep/select/checkboxGroup" class="x-checkbox-group" 
            name="ccc" bind-itemset="$model.selectData" bind-itemsetValue="ref('DEMO_TABLE1')"
            bind-itemsetLabel="ref('fString')" bind-ref="ref('fText')"/> 
          <select class="form-control" component="$UI/system/components/justep/select/select" bind-ref="ref('fText')" bind-labelRef="ref('fString')"
            bind-options="$model.selectData" bind-optionsLabel="fString" bind-optionsValue="DEMO_TABLE1"
            bind-optionsCaption="请选择..."/>  
              <input component="$UI/system/components/justep/input/input" placeHolder="请输入text"
                xid="input6-2" class="form-control" data="bizData1" bind-ref="ref('fText')" onRender="input6Render"/>  
              <input component="$UI/system/components/justep/input/input" placeHolder="请输入text"
                xid="input6-21" class="form-control" data="bizData1" bind-ref="ref('fText')"/>  
              <div component="$UI/system/components/justep/output/output" xid="output6-21"
                class="x-output" data="bizData1" bind-ref="ref('fText')" onRender="output6Render"/>  
              <textarea component="$UI/system/components/justep/textarea/textarea" xid="textarea6-21"
                class="form-control" data="bizData1" bind-ref="ref('fText')"/> 
            </div>  
            <div> 
              <label bind-text="label('fTime')"/>  
              <input component="$UI/system/components/justep/input/input" xid="input3-1"
                class="form-control" data="bizData1" bind-ref="ref('fTime')"/> 
            </div> 
          </li> 
        </ul> 
    
        <h3>描述的Data组件</h3>  
        <div> 
          <a component="$UI/system/components/justep/button/button" onClick="{operation:'data1.new'}"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.refresh'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.delete'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.save'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.firstRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.prevRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-left"><i/><span></span></a>  
          <a onClick="{operation:'data1.nextRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-right"><i/><span></span></a>  
          <a onClick="{operation:'data1.lastRow'}" component="$UI/system/components/justep/button/button"
            label="" class="btn btn-info btn-icon-right"><i/><span></span></a> 
        </div> 
        <div>当前行:</div> 
        <div> 
          <label bind-text="data1.label('fName')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入名称"
            style="300px" xid="input51" class="form-control" data="data1" bind-ref="data1.ref('fName')"/>  
        </div>    
        <div> 
          <label bind-text="data1.label('fAge')"/>  
          <input component="$UI/system/components/justep/input/input" placeHolder="请输入年龄"
            style="300px" xid="input52" class="form-control" data="data1" bind-ref="data1.ref('fAge')"/>  
        </div>    
      </div> 
    </div>

    网络查找(未验证):

    整理了下list和data组件的绑定关系,请问版主,是否满足以下规律,如果不是,请帮忙指正下小弟。
    1. 动态生成的list组件和动态生成的data组件,无法完成绑定,生成list组件时会出错
    2. 静态定义的list组件和动态生成的data组件(可以在var Model = function(){}中动态生成data组件),可以正常完成绑定,list显示data组件的数据正常
    3. 动态生成的list组件和静态定义的data组件,可以正常完成绑定,list显示data组件的数据正常
    4. 静态定义的list组件和静态定义的data组件,可以正常完成绑定,list显示data组件的数据正常

  • 相关阅读:
    消息队列技术
    NET Core中使用Apworks
    TCP基础
    Oracle停止一个JOB
    如何在Java 8中愉快地处理日期和时间
    mysql字符串区分大小写的问题
    【已解决】javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
    spring boot 1.4默认使用 hibernate validator
    mysql shell
    android:background="@drawable/home_tab_bg"
  • 原文地址:https://www.cnblogs.com/zouhao/p/5775409.html
Copyright © 2011-2022 走看看