关于动态生成data组件

时间:2023-02-27 00:28:13
/*!
* 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="width: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="width:300px" xid="input1" class="form-control" data="bizData1" bind-ref="bizData1.ref('fString')"/>
<input component="$UI/system/components/justep/input/password" placeHolder="请输入字符串"
style="width: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="width: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="width: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组件的数据正常

关于动态生成data组件的更多相关文章

  1. 使用form-create动态生成vue组件

    使用form-create动态生成vue自定义组件和嵌套表单组件 [github] | [说明文档] 示例 let rule = [ { type:'row', children:[ { type:' ...

  2. &lbrack;SoapUI&rsqb; 从上一个测试步骤获取ID list,通过Groovy脚本动态生成 Data Source 供后面的步骤使用

    https://support.smartbear.com/readyapi/docs/testing/data-driven/types/groovy.html 从官网拷贝code到SoapUI里面 ...

  3. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

  4. MVC5&plus;EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  5. MVC 5 &plus; EF6 入门完整教程14 -- 动态生成面包屑导航

    上篇文章我们完成了 动态生成多级菜单 这个实用组件. 本篇文章我们要开发另一个实用组件:面包屑导航. 面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱 ...

  6. 基于DevExpress的BandedGridView动态生成多行(复合)表头

    最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...

  7. 解决 Vue 动态生成 el-checkbox 点击无法赋值问题

    博客地址:https://ainyi.com/68 最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-mo ...

  8. java根据模板HTML动态生成PDF

    原文:https://segmentfault.com/a/1190000009160184 一.需求说明:根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看. 二.解决方案: ...

  9. 百度echart如何动态生成图表

    百度echart如何动态生成图表 一.总结 一句话总结: clear hideloading setOption 主要是下面三行代码: myChart.clear(); //清空画布myChart.h ...

随机推荐

  1. C&num;语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  2. 移动端H5页面之iphone6的适配&lpar;转&rpar;

    iphone6 及 iphone 6 plus 已经出来一段时间了.很多移动端网站,以前写死body 为320px的,现在估计也忙着做适配了. 大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H ...

  3. ZOJ 3545 Rescue the Rabbit(AC自动机&plus;状压DP)(The 2011 ACM-ICPC Asia Dalian Regional Contest)

    Dr. X is a biologist, who likes rabbits very much and can do everything for them. 2012 is coming, an ...

  4. python函数: 内置函数

    forthttp://blog.csdn.net/pipisorry/article/details/44755423 Python内置函数 Python内置(built-in)函数随着python解 ...

  5. Java date

    http://liyongyao.blog.51cto.com/2895045/1206770 http://javaforu.com/

  6. chrome恢复默认搜索引擎为Google

    管理员身份运行cmd RD /S /Q "%WinDir%\System32\GroupPolicyUsers" RD /S /Q "%WinDir%\System32\ ...

  7. IDEA控制台问题:java lang OutOfMemoryError:PermGen space

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域. OutOfMemoryError: PermGen space从表面上看就是内存溢出, ...

  8. Python全栈之路----常用模块----os模块

    os模块提供了很多允许你的程序和操作系统直接交互的功能 得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd() #test.py import os print(os.getc ...

  9. SpringMVC学习笔记:表单提交 参数的接收

    SpringMVC可以接收原生form表单和json格式数据 有一个名为Book的model,其中的属性如下: 字符串类型的name,数字类型的price,数组类型的cover,集合类型的author ...

  10. 查看Django和flask版本

    查看Django版本 检查是否安装成功,可以在dos下查看Django版本. 1.输入python 2.输入import django 3.输入django.get_version() 1 2 3 4 ...