success : function(response) {
var array = Ext.util.JSON.decode(response.responseText);
var limitJson=Ext.util.JSON.encode(array.cellLimitJson);
var limitObj = Ext.util.JSON.decode(limitJson.substring(1,
limitJson.length - 1));
var table_items=[];
var limitCount=0;
for(var i=0; i<limitObj.length; i++){
var tableObj=limitObj[i];
var cell_items=[];
var cell_panel=[];
for(var j=0; j<tableObj.items.length; j++){
var playObj=tableObj.items[j];
var playLabel= new Ext.form.Label({html:playObj.playname});
cell_items.push(playLabel);
for(var k=0; k<playObj.items.length; k++){
var cellObj=playObj.items[k];
var cellLabel= new Ext.form.Label({html:' '+cellObj.cellname});
var numberField=new Ext.form.NumberField({
name : 'limitAmountList['+limitCount+'].maxbetamount',
width :50,
value :cellObj.maxBet
});
var id = new Ext.form.TextField({
name : 'limitAmountList['+limitCount+'].id',
value :cellObj.id,
hidden :true
});
cell_items.push(cellLabel,numberField,id);
limitCount++;
}
var panel = new Ext.Panel({
layout :'column',
width :560,
height :25,
items:cell_items
});
cell_panel.push(panel);
}
var fs=new Ext.form.FieldSet({
title :tableObj.tablename,
layout : 'fit',
autoHeight:true,
autoWidth :true,
items :cell_panel
});
table_items.push(fs);
}
limit_form = new Ext.form.FormPanel( {
labelAlign :'left',
labelWidth :100,
frame :true,
defaults : {
msgTarget :'side'
},
bodyStyle :'padding:5px',
width :600,
url :'/gamemanage/member_updateMemberLimitAmount.action',
autoScroll :true,
items :table_items
});
limit_win.add(limit_form);
limit_win.doLayout();
}
怎么实现图中的大中小和单中双 换行呢???
[img]http://dl.iteye.com/upload/attachment/176570/0149b2c1-7662-3417-aefb-9430714bcd34.jpg[/img]
[b]问题补充:[/b]
Map>> tableMap
= new HashMap>> ();
for(CellLimitAmountDTO table : tableList) {
//游戏玩法
List tablePlayList = celllimitDao.findTablePlay(table.getTableid());
Map<CellLimitAmountDTO,List<CellLimitAmountDTO>> playCellMap
= new HashMap<CellLimitAmountDTO, List<CellLimitAmountDTO>>();
for(CellLimitAmountDTO tablePlay : tablePlayList) {
List<CellLimitAmountDTO> playCellList = new ArrayList<CellLimitAmountDTO>();
for(CellLimitAmountDTO cellAmount : cellLimitList){
if(tablePlay.getPlayid().equals(cellAmount.getPlayid())) {
playCellList.add(cellAmount);
}
}
playCellMap.put(tablePlay, playCellList);
}
tableMap.put(table, playCellMap);
}
StringBuilder sb = new StringBuilder();
sb.append("[");
Iterator<CellLimitAmountDTO> tableIterator=tableMap.keySet().iterator();
while(tableIterator.hasNext()){
CellLimitAmountDTO table = tableIterator.next();
sb.append("{tablename:'");
sb.append(table.getTablename());
sb.append("',tableid:'");
sb.append(table.getTableid());
sb.append("',");
Map<CellLimitAmountDTO,List<CellLimitAmountDTO>> playCellsMap = tableMap.get(table);
if(playCellsMap.size()>0){
sb.append("items:[");
Iterator<CellLimitAmountDTO> playIterator = playCellsMap.keySet().iterator();
while(playIterator.hasNext()) {
CellLimitAmountDTO play = playIterator.next();
sb.append("{playid:'");
sb.append(play.getPlayid());
sb.append("',playname:'");
sb.append(play.getPlayname());
sb.append("',");
List<CellLimitAmountDTO> cellList = playCellsMap.get(play);
if(cellList.size()>0) {
sb.append("items:[");
for(CellLimitAmountDTO cell : cellList){
sb.append("{cellid:'");
sb.append(cell.getCellid());
sb.append("',maxBet:'");
sb.append(cell.getMaxbetamount());
sb.append("',cellname:'");
sb.append(cell.getCellname());
sb.append("',id:'");
sb.append(cell.getId());
sb.append("'},");
}
sb.deleteCharAt(sb.length()-1);
sb.append("]");
}
sb.append("},");
}
sb.deleteCharAt(sb.length()-1);
sb.append("]");
}
sb.append("},");
}
sb.deleteCharAt(sb.length()-1);
sb.append("]");
System.out.println(sb.toString());
return sb.toString();
[b]问题补充:[/b]
To yourgname:是不是第一个文本框及文本框前面的汉字作为一行
而单中双及后面的所有文本框作为第二行???
是的,就是要实现这个效果,可以修改TextField的值 然后提交
[b]问题补充:[/b]
[code="java"]
success : function(response) {
var array = Ext.util.JSON.decode(response.responseText);
var limitJson=Ext.util.JSON.encode(array.cellLimitJson);
var limitObj = Ext.util.JSON.decode(limitJson.substring(1,limitJson.length - 1));
var table_items=[];
var limitCount=0;
for(var i=0; i<limitObj.length; i++){
var tableObj=limitObj[i];
var cell_items=[];
var cell_panel=[];
for(var j=0; j<tableObj.items.length; j++){
var playObj=tableObj.items[j];
var playLabel= new Ext.form.Label({html:playObj.playname}); //显示玩法名称Label 如大中小
cell_items.push(playLabel);
for(var k=0; k<playObj.items.length; k++){ //迭代出玩法中是items 如 大
var cellObj=playObj.items[k];
var cellLabel= new Ext.form.Label({html:' '+cellObj.cellname}); //显示 items
var numberField=new Ext.form.NumberField({ //显示items后的 TextField
name : 'limitAmountList['+limitCount+'].maxbetamount',
width :50,
value :cellObj.maxBet
});
var id = new Ext.form.TextField({ //每个items 所对应的id 便于提交修改
name : 'limitAmountList['+limitCount+'].id',
value :cellObj.id,
hidden :true
});
cell_items.push(cellLabel,numberField,id);
limitCount++;
}
var panel = new Ext.Panel({ //显示玩法及下items 的Panel
layout :'column',
width :560,
height :25,
items:cell_items
});
cell_panel.push(panel);
}
var fs=new Ext.form.FieldSet({ //设置FieldSet 如 北京
title :tableObj.tablename,
layout : 'fit',
autoHeight:true,
autoWidth :true,
items :cell_panel
});
table_items.push(fs);
}
limit_form = new Ext.form.FormPanel( { //设置FormPanel
labelAlign :'left',
labelWidth :100,
frame :true,
defaults : {
msgTarget :'side'
},
bodyStyle :'padding:5px',
width :600,
url :'/gamemanage/member_updateMemberLimitAmount.action',
autoScroll :true,
items :table_items
});
limit_win.add(limit_form);
limit_win.doLayout();
}
[/code]
[b]问题补充:[/b]
所以的组件都是根据后台请求到的数据来生成的
[b]问题补充:[/b]
[{tablename:'sdafas',tableid:'02',items:[{playid:'01',playname:'大中小',items:[{cellid:'01',maxBet:'65948.0',cellname:'大',id:'119'}]}]},{tablename:'北京',tableid:'01',items:[{playid:'01',playname:'大中小',items:[{cellid:'01',maxBet:'65948.0',cellname:'大',id:'119'}]},{playid:'02',playname:'单中双',items:[{cellid:'02',maxBet:'5000.0',cellname:'中',id:'118'},{cellid:'03',maxBet:'6515.0',cellname:'双',id:'121'},{cellid:'01',maxBet:'6597.0',cellname:'单',id:'120'}]}]}]
[b]问题补充:[/b]
[code="java"]
Ext.onReady( function() {
Ext.QuickTips.init();
// 测试数据
var sData = "[{tablename:'北京',tableid:'beijing',";
sData += "items:[";
sData += "{playid:'id1',playname:'大中小',items:[{cellid:'11',maxBet:'123',cellname:'大',id:'id2'}]},";
sData += "{playid:'id2',playname:'单中双',items:[{cellid:'22',maxBet:'234',cellname:'单',id:'id3'},";
sData += "{cellid:'33',maxBet:'345',cellname:'中',id:'id4'},";
sData += "{cellid:'44',maxBet:'456',cellname:'双',id:'id5'}";
sData += "]}";
sData += "]";
sData += "}]";
var array = Ext.util.JSON.decode(sData);
//var limitJson=Ext.util.JSON.encode(array.cellLimitJson);
//var limitObj = Ext.util.JSON.decode(limitJson.substring(1, limitJson.length - 1));
var limit_win = [];
var limit_form;
var limitObj = array ;
var table_items = [];
var limitCount = 0;
alert('00');
for ( var i = 0; i < limitObj.length; i++) {
var tableObj = limitObj[i];
var cell_items = [];
var cell_panel = [];
for ( var j = 0; j < tableObj.items.length; j++) {
var playObj = tableObj.items[j];
var playLabel = new Ext.form.Label( {
html :playObj.playname
});//显示玩法名称Label 如大中小
cell_items.push(playLabel);alert('11');
for ( var k = 0; k < playObj.items.length; k++) {//迭代出玩法中是items 如 大
var cellObj = playObj.items[k];
var cellLabel = new Ext.form.Label( {
html :' ' + cellObj.cellname
});//显示 items
alert('22');
var numberField = new Ext.form.NumberField( {//显示items后的 TextField
name :'limitAmountList[' + limitCount + '].maxbetamount',
width :50,
value :cellObj.maxBet
});
var id = new Ext.form.TextField( {//每个items 所对应的id 便于提交修改
name :'limitAmountList[' + limitCount + '].id',
value :cellObj.id,
hidden :true
});alert('33');
//var panel = new Ext.Panel({items:[cellLabel,numberField,id]});
cell_items.push(cellLabel, numberField, id);
limitCount++;
}
var panel = new Ext.Panel( { //显示玩法及下items 的Panel
layout :'column',
width :560,
//height :30,
items :cell_items
});alert('44');
cell_panel.push(panel);
//cell_items = [];
//panel = [];
}
var fs = new Ext.form.FieldSet( { //设置FieldSet 如 北京
title :tableObj.tablename,
layout :'fit',
autoHeight :true,
autoWidth :true,
items : []
// items :cell_panel
});
// 把组件添加到FieldSet里
if (cell_panel != null && cell_panel.length > 0) {
fs.remove(0);// 先把空项删除,如果不删除的话,在IE下看就会占了一段空白
for ( var l = 0; l < cell_panel.length; l++) {
fs.add(cell_panel[l]);
}
}alert('55');
table_items.push(fs);
}
limit_form = new Ext.form.FormPanel( {//设置FormPanel
renderTo :'form-ct',
labelAlign :'left',
labelWidth :100,
frame :true,
defaults : {
msgTarget :'side'
},
//bodyStyle :'padding:5px',
width :600,
//url :'/gamemanage/member_updateMemberLimitAmount.action',
autoScroll :true,
items :table_items
});alert('66');
//limit_win.add(limit_form);
//limit_win.doLayout();
});
[/code]
还是不行啊 第二次弹出 44 时 报错了 还得请哥们帮忙瞧瞧啊
[img]http://dl.iteye.com/upload/attachment/177006/659bf574-3388-31f5-884f-582b2490015e.jpg[/img]
已经把你的代码修改好了,你只要对着红色部份修改你的代码就可以了,有些地方跟你的代码不同是因为我没有你的测试数据,只好按着你写的后台代码写了一些json测试数据:
Ext.onReady(function(){
Ext.QuickTips.init();
// 测试数据
var sData = "[{tablename:'北京',tableid:'beijing',";
sData += "items:[";
sData += "{playid:'id1',playname:'大中小',items:[{cellid:'11',maxBet:'123',cellname:'大',id:'id2'}]},";
sData += "{playid:'id2',playname:'单中双',items:[{cellid:'22',maxBet:'234',cellname:'单',id:'id3'},";
sData += "{cellid:'33',maxBet:'345',cellname:'中',id:'id4'},";
sData += "{cellid:'44',maxBet:'456',cellname:'双',id:'id5'}";
sData += "]}";
sData += "]";
sData += "}]";
var array = Ext.util.JSON.decode(sData);
//var limitJson=Ext.util.JSON.encode(array.cellLimitJson);
//var limitObj = Ext.util.JSON.decode(limitJson.substring(1, limitJson.length - 1));
var limit_win = [];
var limit_form;
var limitObj = [array];
var table_items=[];
var limitCount=0;
for(var i=0; i<limitObj.length; i++){
var tableObj=limitObj[i];
var cell_items=[];
var cell_panel=[];
for(var j=0; j<tableObj[0].items.length; j++){
var playObj=tableObj[0].items[j];
var playLabel= new Ext.form.Label({html:playObj.playname});//显示玩法名称Label 如大中小
cell_items.push(playLabel);
for(var k=0; k<playObj.items.length; k++){//迭代出玩法中是items 如 大
var cellObj=playObj.items[k];
var cellLabel= new Ext.form.Label({html:' '+cellObj.cellname});//显示 items
var numberField=new Ext.form.NumberField({//显示items后的 TextField
name : 'limitAmountList['+limitCount+'].maxbetamount',
width :50,
value :cellObj.maxBet
});
var id = new Ext.form.TextField({//每个items 所对应的id 便于提交修改
name : 'limitAmountList['+limitCount+'].id',
value :cellObj.id,
hidden :true
});
//var panel = new Ext.Panel({items:[cellLabel,numberField,id]});
cell_items.push(cellLabel,numberField,id);
limitCount++;
}
var panel = new Ext.Panel({ //显示玩法及下items 的Panel
layout :'column',
width :560,
[color=red]//height :30,[/color]
items:cell_items
});
cell_panel.push(panel);
[color=red]cell_items = [];
panel = [];[/color]
}
var fs=new Ext.form.FieldSet({ //设置FieldSet 如 北京
title :tableObj[0].tablename,
layout : 'fit',
autoHeight:true,
autoWidth :true,
[color=red]items:[]
// items :cell_panel[/color]
});
[color=red]// 把组件添加到FieldSet里
if (cell_panel != null && cell_panel.length > 0) {
fs.remove(0);// 先把空项删除,如果不删除的话,在IE下看就会占了一段空白
for(var l = 0; l < cell_panel.length; l++) {
fs.add(cell_panel[l]);
}
}[/color]
table_items.push(fs);
}
limit_form = new Ext.form.FormPanel( {//设置FormPanel
renderTo:'form-ct',
labelAlign :'left',
labelWidth :100,
frame :true,
defaults : {
msgTarget :'side'
},
[color=red]//bodyStyle :'padding:5px',[/color]
width :600,
url :'/gamemanage/member_updateMemberLimitAmount.action',
autoScroll :true,
items :table_items
});
//limit_win.add(limit_form);
//limit_win.doLayout();
});
添加布局去控制,如果不会就把response.responseText的数据附加出来,我帮你改。
[code="js"]
success: function (response) {
var array = Ext.util.JSON.decode(response.responseText);
var limitJson = Ext.util.JSON.encode(array.cellLimitJson);
var limitObj = Ext.util.JSON.decode(limitJson.substring(1, limitJson.length - 1));
var table_items = [];
var limitCount = 0;
for (var i = 0; i < limitObj.length; i++) {
var tableObj = limitObj[i];
var cell_items = [];
var cell_panel = [];
for (var j = 0; j < tableObj.items.length; j++) {
var playObj = tableObj.items[j];
var playLabel = new Ext.form.Label({
html: playObj.playname
});
cell_items.push(playLabel);
for (var k = 0; k < playObj.items.length; k++) {
var cellObj = playObj.items[k];
var cellLabel = new Ext.form.Label({
html: ' ' + cellObj.cellname
});
var numberField = new Ext.form.NumberField({
name: 'limitAmountList[' + limitCount + '].maxbetamount',
width: 50,
value: cellObj.maxBet
});
var id = new Ext.form.TextField({
name: 'limitAmountList[' + limitCount + '].id',
value: cellObj.id,
hidden: true
});
cell_items.push(cellLabel, numberField, id);
limitCount++;
}
var panel = new Ext.Panel({
layout: 'column',
width: 560,
height: 25,
items: cell_items
});
cell_panel.push(panel);
}
var fs = new Ext.form.FieldSet({
title: tableObj.tablename,
layout: 'fit',
autoHeight: true,
autoWidth: true,
items: cell_panel
});
table_items.push(fs);
}
limit_form = new Ext.form.FormPanel({
labelAlign: 'left',
labelWidth: 100,
frame: true,
defaults: {
msgTarget: 'side'
},
bodyStyle: 'padding:5px',
width: 600,
url: '/gamemanage/member_updateMemberLimitAmount.action',
autoScroll: true,
items: table_items
});
limit_win.add(limit_form);
limit_win.doLayout();
}
[/code]
看上去好复杂哦. 界面的组件是从后台动态读取生成的啊.
3个for嵌套,看得我云里雾里的. 如果界面元素是固定的,只是数据是变化的话,建议放弃这种做法. 如果只是为了显示数据的话可以用XTemplate
[quote]怎么实现图中的大中小和单中双 换行呢??? [/quote]
从你的图片中看得我也云里雾里的.都不知道那个标签对应那个textfield了
我只知道你想列布局
是不是第一个文本框及文本框前面的汉字作为一行
而单中双及后面的所有文本框作为第二行???
[code="java"]Map < CellLimitAmountDTO,
Map < CellLimitAmountDTO,
List < CellLimitAmountDTO >>> tableMap = new HashMap < CellLimitAmountDTO,
Map < CellLimitAmountDTO,
List < CellLimitAmountDTO >>> ();
for (CellLimitAmountDTO table: tableList) {
//游戏玩法
List < CellLimitAmountDTO > tablePlayList = celllimitDao.findTablePlay(table.getTableid());
Map < CellLimitAmountDTO,
List < CellLimitAmountDTO >> playCellMap = new HashMap < CellLimitAmountDTO,
List < CellLimitAmountDTO >> ();
for (CellLimitAmountDTO tablePlay: tablePlayList) {
List < CellLimitAmountDTO > playCellList = new ArrayList < CellLimitAmountDTO > ();
for (CellLimitAmountDTO cellAmount: cellLimitList) {
if (tablePlay.getPlayid().equals(cellAmount.getPlayid())) {
playCellList.add(cellAmount);
}
}
playCellMap.put(tablePlay, playCellList);
}
tableMap.put(table, playCellMap);
}
StringBuilder sb = new StringBuilder();
sb.append("[");
Iterator < CellLimitAmountDTO > tableIterator = tableMap.keySet().iterator();
while (tableIterator.hasNext()) {
CellLimitAmountDTO table = tableIterator.next();
sb.append("{tablename:'");
sb.append(table.getTablename());
sb.append("',tableid:'");
sb.append(table.getTableid());
sb.append("',");
Map < CellLimitAmountDTO,
List < CellLimitAmountDTO >> playCellsMap = tableMap.get(table);
if (playCellsMap.size() > 0) {
sb.append("items:[");
Iterator < CellLimitAmountDTO > playIterator = playCellsMap.keySet().iterator();
while (playIterator.hasNext()) {
CellLimitAmountDTO play = playIterator.next();
sb.append("{playid:'");
sb.append(play.getPlayid());
sb.append("',playname:'");
sb.append(play.getPlayname());
sb.append("',");
List < CellLimitAmountDTO > cellList = playCellsMap.get(play);
if (cellList.size() > 0) {
sb.append("items:[");
for (CellLimitAmountDTO cell: cellList) {
sb.append("{cellid:'");
sb.append(cell.getCellid());
sb.append("',maxBet:'");
sb.append(cell.getMaxbetamount());
sb.append("',cellname:'");
sb.append(cell.getCellname());
sb.append("',id:'");
sb.append(cell.getId());
sb.append("'},");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
}
sb.append("},");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
}
sb.append("},");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
System.out.println(sb.toString());
return sb.toString();[/code]
后台代码更复杂.哥们.
因为你的组件有不定因素.不太好布局哦.要不可以用table布局可能好解决你的问题.
你先看你返回的一行最多会有多少个元素,包括label,就默认设定列数,这样的便利的时候就只要处理少于列的情况了.最后一个元素可以设定跨列.你可以参考官网的table布局
请问还有什么问题?我把你的json数据用作测试,修改一下代码就可以了:
把
var limitObj = [array];
改成
var limitObj = array;
把
for(var j=0; j<tableObj[0].items.length; j++){
var playObj=tableObj[0].items[j];
改成
for(var j=0; j<tableObj.items.length; j++){
var playObj=tableObj.items[j];
把
var fs=new Ext.form.FieldSet({ //设置FieldSet 如 北京
title :tableObj[0].tablename,
改成
var fs=new Ext.form.FieldSet({ //设置FieldSet 如 北京
title :tableObj.tablename,
[color=red]注意:
var limitJson=Ext.util.JSON.encode(array.cellLimitJson);
我在调试的时候发现你这里是null的,脚本会出错,所以不要这样写。
建议:
var array = Ext.util.JSON.decode(response.responseText);
var limitObj = array;[/color]
[code="js"]
[{
tablename: 'sdafas',
tableid: '02',
items: [{
playid: '01',
playname: '大中小 ',
items: [{
cellid: '01',
maxBet: '65948.0',
cellname: '大',
id: '119'
}]
}]
},
{
tablename: '北京',
tableid: '01',
items: [{
playid: '01',
playname: '大中小',
items: [{
cellid: '01',
maxBet: '65948.0',
cellname: '大',
id: '119'
}]
},
{
playid: '02',
playname: '单中双',
items: [{
cellid: '02',
maxBet: '5000.0',
cellname: '中',
id: '118'
},
{
cellid: '03',
maxBet: '6515.0',
cellname: '双',
id: '121'
},
{
cellid: '01',
maxBet: '6597.0',
cellname: '单',
id: '120'
}]
}]
}]
[/code]
建议你在后台组装好表单和表单的字段布局的json,到前台就整一次就可以了
用火狐的firebug