• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
shhqy82
博客园    首页    新随笔    联系   管理    订阅  订阅
Ext JS 4 主从表

Model

定义三个model

 

Js代码  
  1. /**  
  2.  * 对应Struts2中action的model  
  3.  */  
  4. Ext.define('PriceAreaAction', {   
  •     extend : 'Ext.data.Model',   
  •     fields : [ 'priceArea', 'updatePriceEntrys', 'createPriceEntrys',   
  •             'deletePriceEntrys', 'message' ],   
  •     proxy : {   
  •         type : 'ajax',   
  •         api : {   
  •             create : 'savePriceArea.action',   
  •             update : 'updatePriceArea.action'  
  •         },   
  •         writer : {   
  •             type : 'json'  
  •         },   
  •         reader : {   
  •             type : 'json'  
  •         }   
  •     }   
  • });   
  •     
  • /**  
  •  * PriceArea的Model  
  •  */  
  • Ext.define('priceAreaModel', {   
  •     extend : 'Ext.data.Model',   
  •     fields : [ 'id', 'areaCode', 'areaName', 'createUser', {   
  •         name : 'createDate',   
  •         type : 'number'  
  •     }, 'modifyUser', {   
  •         name : 'modifyDate',   
  •         type : 'number'  
  •     } ],   
  •     hasMany : {   
  •         model : 'entryModel',   
  •         name : 'entryList',   
  •         foreignKey : 'areaId',   
  •         associationKey : 'entryList',   
  •         primaryKey : 'id',   
  •         storeConfig : Ext.data.StoreManager.lookup('entryStore')   
  •     }   
  • });   
  • /*  
  •  * PriceEntry的Model  
  •  */  
  • Ext.define('entryModel', {   
  •     extend : 'Ext.data.Model',   
  •     fields : [ 'id', 'areaId', {   
  •         name : 'price',   
  •         type : 'number'  
  •     }, 'priceType', 'createUser', {   
  •         name : 'createDate',   
  •         type : 'number'  
  •     }, 'modifyUser', {   
  •         name : 'modifyDate',   
  •         type : 'number'  
  •     } ],   
  •     belongsTo : {   
  •         type : 'belongsTo',   
  •         model : 'priceAreaModel',   
  •         primaryKey : 'id',   
  •         foreignKey : 'areaId'  
  •     }   
  • });  
/**
 * 对应Struts2中action的model
 */
Ext.define('PriceAreaAction', {
    extend : 'Ext.data.Model',
    fields : [ 'priceArea', 'updatePriceEntrys', 'createPriceEntrys',
            'deletePriceEntrys', 'message' ],
    proxy : {
        type : 'ajax',
        api : {
            create : 'savePriceArea.action',
            update : 'updatePriceArea.action'
        },
        writer : {
            type : 'json'
        },
        reader : {
            type : 'json'
        }
    }
});
 
/**
 * PriceArea的Model
 */
Ext.define('priceAreaModel', {
    extend : 'Ext.data.Model',
    fields : [ 'id', 'areaCode', 'areaName', 'createUser', {
        name : 'createDate',
        type : 'number'
    }, 'modifyUser', {
        name : 'modifyDate',
        type : 'number'
    } ],
    hasMany : {
        model : 'entryModel',
        name : 'entryList',
        foreignKey : 'areaId',
        associationKey : 'entryList',
        primaryKey : 'id',
        storeConfig : Ext.data.StoreManager.lookup('entryStore')
    }
});
/*
 * PriceEntry的Model
 */
Ext.define('entryModel', {
    extend : 'Ext.data.Model',
    fields : [ 'id', 'areaId', {
        name : 'price',
        type : 'number'
    }, 'priceType', 'createUser', {
        name : 'createDate',
        type : 'number'
    }, 'modifyUser', {
        name : 'modifyDate',
        type : 'number'
    } ],
    belongsTo : {
        type : 'belongsTo',
        model : 'priceAreaModel',
        primaryKey : 'id',
        foreignKey : 'areaId'
    }
});

 

第一个model与服务器端的Action对应,后两个model与服务端的两个实体相似。在定义model的时候,也可以定义一对多的关系,在model中定义一个hasMany的属性,这个属性与服务端定义的List是一样的,它可以关联到另一个自定义的model,在这个hasMany中还要定义一个foreignKey,用于外键关联到另一个model对象上的上面的哪个属性。例子就是priceAreaModel关联到entryModel。

 

 store 

定义两个Store,priceAreaStore用于得到区域的信息,entryStore用于得到区域价格信息

 

Js代码  
  1. var priceAreaStore = Ext.create('Ext.data.Store', {   
  2.     pageSize : 20,   
  3.     model : 'priceAreaModel',   
  4.     autoLoad : true,   
  5.     proxy : {   
  6.         type : 'ajax',   
  7.         actionMethods : 'post',   
  8.         url : 'queryPriceArea.action',   
  9.         reader : {   
  10.             type : 'json',   
  11.             root : 'priceAreaList',   
  12.             totalProperty : 'totalCount'  
  13.         }   
  14.     }   
  15. });   
  16. var entryStore = Ext.create('Ext.data.Store', {   
  17.     model : 'entryModel',   
  18.     storeId : 'entryStore',   
  19.     proxy : {   
  20.         url : 'queryPriceEntryByPriceAreaId.action',   
  21.         type : 'ajax',   
  22.         reader : {   
  23.             type : 'json',   
  24.             root : 'priceEntryList'  
  25.         }   
  26.     }   
  27. });  
var priceAreaStore = Ext.create('Ext.data.Store', {
    pageSize : 20,
    model : 'priceAreaModel',
    autoLoad : true,
    proxy : {
        type : 'ajax',
        actionMethods : 'post',
        url : 'queryPriceArea.action',
        reader : {
            type : 'json',
            root : 'priceAreaList',
            totalProperty : 'totalCount'
        }
    }
});
var entryStore = Ext.create('Ext.data.Store', {
    model : 'entryModel',
    storeId : 'entryStore',
    proxy : {
        url : 'queryPriceEntryByPriceAreaId.action',
        type : 'ajax',
        reader : {
            type : 'json',
            root : 'priceEntryList'
        }
    }
});

 

 

页面与操作

 

 

Js代码  
  1. Ext.require([ 'Ext.form.*', 'Ext.data.*', 'Ext.grid.Panel',   
  2.         'Ext.layout.container.Column' ]);   
  3.     
  4. var priceAreaGrid = new Ext.grid.GridPanel({   
  5.     border : false,   
  6.     autoScroll : true,   
  7.     store : priceAreaStore,   
  8.     columns : [ {   
  9.         id : 'id',   
  10.         hidden : true,   
  11.         dataIndex : 'id'  
  12.     }, {   
  13.         text : i18n('page.module.oneToMany.areaCode'),   
  14.         name:'areaCode',   
  15.         flex : 1,   
  16.         sortable : true,   
  17.         dataIndex : 'areaCode'  
  18.     
  19.     }, {   
  20.         text : i18n('page.module.oneToMany.areaName'),   
  21.         name:'areaName',   
  22.         flex : 1,   
  23.         sortable : true,   
  24.         dataIndex : 'areaName'  
  25.     }, {   
  26.         text : i18n('page.module.oneToMany.createUser'),   
  27.         name:'createUser',   
  28.         flex : 1,   
  29.         sortable : true,   
  30.         dataIndex : 'createUser'  
  31.     }, {   
  32.         text : i18n('page.module.oneToMany.createDate'),   
  33.         name:'createDate',   
  34.         flex : 1,   
  35.         sortable : true,   
  36.         renderer : changeToDate,   
  37.         dataIndex : 'createDate'  
  38.     }, {   
  39.         text : i18n('page.module.oneToMany.modifyUser'),   
  40.         name:'modifyUser',   
  41.         flex : 1,   
  42.         sortable : true,   
  43.         dataIndex : 'modifyUser'  
  44.     }, {   
  45.         text : i18n('page.module.oneToMany.modifyDate'),   
  46.         name:'modifyDate',   
  47.         flex : 1,   
  48.         sortable : true,   
  49.         renderer : changeToDate,   
  50.         dataIndex : 'modifyDate'  
  51.     } ],   
  52.     width : window.screen.clientWidth * 0.998,   
  53.     height : window.screen.availHeight * 0.7,   
  54.     frame : true,   
  55.     tbar : [ {   
  56.         text : i18n('page.module.oneToMany.add'),   
  57.         handler : function() {   
  58.             createWin(new priceAreaModel());   
  59.         }   
  60.     },{   
  61.         text : i18n('page.module.oneToMany.update'),   
  62.         handler : function() {   
  63.             var sm = priceAreaGrid.getSelectionModel();   
  64.             if (sm.getSelection().length > 0) {   
  65.                 var record = sm.getSelection()[0];   
  66.                 entryStore.load({   
  67.                     params : {   
  68.                         'priceAreaId' : record.get("id")   
  69.                     },   
  70.                     callback: function(records, operation, success) {   
  71.                         if(success){   
  72.                             record.entryList().loadRecords(records,{});   
  73.                             createWin(record);   
  74.                         }   
  75.                     }   
  76.                 });   
  77.     
  78.             } else {   
  79.                 Ext.Msg.alert(i18n('page.module.oneToMany.message'), i18n('page.module.oneToMany.priceAreaGrid.message'));   
  80.             }   
  81.         }   
  82.     }, {   
  83.         text : i18n('page.module.oneToMany.delete'),   
  84.         handler : function() {   
  85.             var sm = priceAreaGrid.getSelectionModel();   
  86.             var selection = sm.getSelection();   
  87.             if (sm.getSelection().length > 0) {   
  88.                 Ext.MessageBox.confirm(i18n('page.module.oneToMany.chick'),i18n('page.module.oneToMany.priceAreaGrid.chick_message'),   
  89.                     function(btn) {   
  90.                         if (btn == 'yes') {   
  91.                             Ext.Ajax.request({   
  92.                                 url : 'deletePriceArea.action',   
  93.                                 params : {   
  94.                                     'priceAreaId' : selection[0].data.id   
  95.                                 },   
  96.                                 success : function(   
  97.                                         response) {   
  98.                                     var json = Ext.decode(response.responseText);   
  99.                                     if (json.success == false) {   
  100.                                         Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);   
  101.                                     } else {   
  102.                                         Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);   
  103.                                         priceAreaStore.remove(selection);   
  104.                                     }   
  105.                                 },   
  106.                                 failure : function(response) {   
  107.                                     var json = Ext.decode(response.responseText);   
  108.                                     Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);   
  109.                                 }   
  110.                             });   
  111.                         }   
  112.                     });   
  113.             } else {   
  114.                 Ext.Msg.alert(i18n('page.module.oneToMany.message'), i18n('page.module.oneToMany.priceAreaGrid.message'));   
  115.             }   
  116.         }   
  117.     } ],   
  118.     bbar : Ext.create('Ext.toolbar.Paging', {   
  119.         id : 'priceAreaGrid_pagingToolbar',   
  120.         store : priceAreaStore,   
  121.         displayMsg : i18n('page.module.oneToMany.priceAreaGrid.displayMsg'),   
  122.         displayInfo : true,   
  123.         items:[   
  124.             '-',{   
  125.                     text: i18n('page.module.oneToMany.priceAreaGrid.page_count'),   
  126.                     xtype: 'tbtext'  
  127.                 },Ext.create('Ext.form.ComboBox', {   
  128.                    width:          50,   
  129.                    value:          '20',   
  130.                    triggerAction:  'all',   
  131.                    forceSelection: true,   
  132.                    editable:       false,   
  133.                    name:           'comboItem',   
  134.                    displayField:   'value',   
  135.                    valueField:     'value',   
  136.                    queryMode:      'local',   
  137.                    store : Ext.create('Ext.data.Store',{   
  138.                        fields : ['value'],   
  139.                        data   : [   
  140.                            {'value':'10'},   
  141.                            {'value':'15'},   
  142.                            {'value':'20'},   
  143.                            {'value':'25'},   
  144.                            {'value':'40'},   
  145.                            {'value':'100'}   
  146.                        ]   
  147.                    }),   
  148.                    listeners:{   
  149.                         select : {scope : this,   
  150.                             fn: function(_field,_value){   
  151.                                 var pageSize = priceAreaStore.pageSize;   
  152.                                 var newPageSize = parseInt(_field.value);   
  153.                                 if(pageSize!=newPageSize){   
  154.                                     priceAreaStore.pageSize = newPageSize;   
  155.                                     Ext.getCmp('priceAreaGrid_pagingToolbar').moveFirst();   
  156.                                 }   
  157.                             }   
  158.                         }   
  159.                    }   
  160.                }),{   
  161.                     text: i18n('page.module.oneToMany.priceAreaGrid.number'),   
  162.                     xtype: 'tbtext'  
  163.                }]   
  164.     })   
  165. });   
  166.     
  167. Ext.onReady(function() {   
  168.     setTimeout(function() {   
  169.             Ext.get('loading').remove();   
  170.             Ext.get('loading-mask').fadeOut({   
  171.                 remove : true  
  172.             });   
  173.         }, 1000);   
  174.     Ext.QuickTips.init();   
  175.     Ext.form.Field.prototype.msgTarget = "side";   
  176.     Ext.create('Ext.Viewport',{   
  177.         layout : {   
  178.             type : 'border'  
  179.         },   
  180.         defaults : {   
  181.             split : true  
  182.         },   
  183.         width : window.screen.availWidth,   
  184.         height : window.screen.availHeight,   
  185.         items : [{   
  186.             xtype : 'form',   
  187.             id : "chack_form",   
  188.             region : 'north',   
  189.             border : false,   
  190.             hight : 50,   
  191.             width : 500,   
  192.             layout : {   
  193.                 type : 'hbox',   
  194.                 padding : 5   
  195.             },   
  196.             baseCls : 'x-plain',   
  197.             items : [{   
  198.                     xtype : 'textfield',   
  199.                     fieldLabel : i18n('page.module.oneToMany.areaCode'),   
  200.                     labelPad : 2,   
  201.                     labelWidth : 80,   
  202.                     name : 'priceArea.areaCode',   
  203.                     width : 250,   
  204.                     hight : 25   
  205.                 },{   
  206.                     xtype : 'label',   
  207.                     width : 50   
  208.                 },{   
  209.                     xtype : 'textfield',   
  210.                     fieldLabel : i18n('page.module.oneToMany.areaName'),   
  211.                     labelPad : 2,   
  212.                     labelWidth : 80,   
  213.                     name : 'priceArea.areaName',   
  214.                     width : 250,   
  215.                     hight : 25   
  216.                 },{   
  217.                     xtype : 'label',   
  218.                     width : 50   
  219.                 },{   
  220.                     xtype : 'button',   
  221.                     text : i18n('page.module.oneToMany.button_chick'),   
  222.                     width : 100,   
  223.                     hight : 25,   
  224.                     handler : function() {   
  225.                         priceAreaStore.load({   
  226.                             params : {   
  227.                                 'priceArea.areaName' : this.up('form').getForm().findField("priceArea.areaName").getValue(),   
  228.                                 'priceArea.areaCode' : this.up('form').getForm().findField("priceArea.areaCode").getValue()   
  229.                             }   
  230.                         });   
  231.                     }   
  232.                 } ]   
  233.             }, {   
  234.                 region : 'center',   
  235.                 border:false,   
  236.                 autoScroll : true,   
  237.                 items : [ priceAreaGrid ]   
  238.             }]   
  239.     });   
  240. });  
Ext.require([ 'Ext.form.*', 'Ext.data.*', 'Ext.grid.Panel',
        'Ext.layout.container.Column' ]);
 
var priceAreaGrid = new Ext.grid.GridPanel({
    border : false,
    autoScroll : true,
    store : priceAreaStore,
    columns : [ {
        id : 'id',
        hidden : true,
        dataIndex : 'id'
    }, {
        text : i18n('page.module.oneToMany.areaCode'),
        name:'areaCode',
        flex : 1,
        sortable : true,
        dataIndex : 'areaCode'
 
    }, {
        text : i18n('page.module.oneToMany.areaName'),
        name:'areaName',
        flex : 1,
        sortable : true,
        dataIndex : 'areaName'
    }, {
        text : i18n('page.module.oneToMany.createUser'),
        name:'createUser',
        flex : 1,
        sortable : true,
        dataIndex : 'createUser'
    }, {
        text : i18n('page.module.oneToMany.createDate'),
        name:'createDate',
        flex : 1,
        sortable : true,
        renderer : changeToDate,
        dataIndex : 'createDate'
    }, {
        text : i18n('page.module.oneToMany.modifyUser'),
        name:'modifyUser',
        flex : 1,
        sortable : true,
        dataIndex : 'modifyUser'
    }, {
        text : i18n('page.module.oneToMany.modifyDate'),
        name:'modifyDate',
        flex : 1,
        sortable : true,
        renderer : changeToDate,
        dataIndex : 'modifyDate'
    } ],
    width : window.screen.clientWidth * 0.998,
    height : window.screen.availHeight * 0.7,
    frame : true,
    tbar : [ {
        text : i18n('page.module.oneToMany.add'),
        handler : function() {
            createWin(new priceAreaModel());
        }
    },{
        text : i18n('page.module.oneToMany.update'),
        handler : function() {
            var sm = priceAreaGrid.getSelectionModel();
            if (sm.getSelection().length > 0) {
                var record = sm.getSelection()[0];
                entryStore.load({
                    params : {
                        'priceAreaId' : record.get("id")
                    },
                    callback: function(records, operation, success) {
                        if(success){
                            record.entryList().loadRecords(records,{});
                            createWin(record);
                        }
                    }
                });
 
            } else {
                Ext.Msg.alert(i18n('page.module.oneToMany.message'), i18n('page.module.oneToMany.priceAreaGrid.message'));
            }
        }
    }, {
        text : i18n('page.module.oneToMany.delete'),
        handler : function() {
            var sm = priceAreaGrid.getSelectionModel();
            var selection = sm.getSelection();
            if (sm.getSelection().length > 0) {
                Ext.MessageBox.confirm(i18n('page.module.oneToMany.chick'),i18n('page.module.oneToMany.priceAreaGrid.chick_message'),
                    function(btn) {
                        if (btn == 'yes') {
                            Ext.Ajax.request({
                                url : 'deletePriceArea.action',
                                params : {
                                    'priceAreaId' : selection[0].data.id
                                },
                                success : function(
                                        response) {
                                    var json = Ext.decode(response.responseText);
                                    if (json.success == false) {
                                        Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);
                                    } else {
                                        Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);
                                        priceAreaStore.remove(selection);
                                    }
                                },
                                failure : function(response) {
                                    var json = Ext.decode(response.responseText);
                                    Ext.MessageBox.alert(i18n('page.module.oneToMany.message'),json.message);
                                }
                            });
                        }
                    });
            } else {
                Ext.Msg.alert(i18n('page.module.oneToMany.message'), i18n('page.module.oneToMany.priceAreaGrid.message'));
            }
        }
    } ],
    bbar : Ext.create('Ext.toolbar.Paging', {
        id : 'priceAreaGrid_pagingToolbar',
        store : priceAreaStore,
        displayMsg : i18n('page.module.oneToMany.priceAreaGrid.displayMsg'),
        displayInfo : true,
        items:[
            '-',{
                    text: i18n('page.module.oneToMany.priceAreaGrid.page_count'),
                    xtype: 'tbtext'
                },Ext.create('Ext.form.ComboBox', {
                   width:          50,
                   value:          '20',
                   triggerAction:  'all',
                   forceSelection: true,
                   editable:       false,
                   name:           'comboItem',
                   displayField:   'value',
                   valueField:     'value',
                   queryMode:      'local',
                   store : Ext.create('Ext.data.Store',{
                       fields : ['value'],
                       data   : [
                           {'value':'10'},
                           {'value':'15'},
                           {'value':'20'},
                           {'value':'25'},
                           {'value':'40'},
                           {'value':'100'}
                       ]
                   }),
                   listeners:{
                        select : {scope : this,
                            fn: function(_field,_value){
                                var pageSize = priceAreaStore.pageSize;
                                var newPageSize = parseInt(_field.value);
                                if(pageSize!=newPageSize){
                                    priceAreaStore.pageSize = newPageSize;
                                    Ext.getCmp('priceAreaGrid_pagingToolbar').moveFirst();
                                }
                            }
                        }
                   }
               }),{
                    text: i18n('page.module.oneToMany.priceAreaGrid.number'),
                    xtype: 'tbtext'
               }]
    })
});
 
Ext.onReady(function() {
    setTimeout(function() {
            Ext.get('loading').remove();
            Ext.get('loading-mask').fadeOut({
                remove : true
            });
        }, 1000);
    Ext.QuickTips.init();
    Ext.form.Field.prototype.msgTarget = "side";
    Ext.create('Ext.Viewport',{
        layout : {
            type : 'border'
        },
        defaults : {
            split : true
        },
        width : window.screen.availWidth,
        height : window.screen.availHeight,
        items : [{
            xtype : 'form',
            id : "chack_form",
            region : 'north',
            border : false,
            hight : 50,
            width : 500,
            layout : {
                type : 'hbox',
                padding : 5
            },
            baseCls : 'x-plain',
            items : [{
                    xtype : 'textfield',
                    fieldLabel : i18n('page.module.oneToMany.areaCode'),
                    labelPad : 2,
                    labelWidth : 80,
                    name : 'priceArea.areaCode',
                    width : 250,
                    hight : 25
                },{
                    xtype : 'label',
                    width : 50
                },{
                    xtype : 'textfield',
                    fieldLabel : i18n('page.module.oneToMany.areaName'),
                    labelPad : 2,
                    labelWidth : 80,
                    name : 'priceArea.areaName',
                    width : 250,
                    hight : 25
                },{
                    xtype : 'label',
                    width : 50
                },{
                    xtype : 'button',
                    text : i18n('page.module.oneToMany.button_chick'),
                    width : 100,
                    hight : 25,
                    handler : function() {
                        priceAreaStore.load({
                            params : {
                                'priceArea.areaName' : this.up('form').getForm().findField("priceArea.areaName").getValue(),
                                'priceArea.areaCode' : this.up('form').getForm().findField("priceArea.areaCode").getValue()
                            }
                        });
                    }
                } ]
            }, {
                region : 'center',
                border:false,
                autoScroll : true,
                items : [ priceAreaGrid ]
            }]
    });
});

 
 打开的过程是:

 

  1. 点击新增(执行“createWin(new priceAreaModel());”,这里为什么要新建一个priceAreaModel,是为了让后面与form绑定的时候有一个对象)
  2. 得到价格区域编辑页面(根据传入的priceAreaModel对象绑定表单,执行priceForm.loadRecord(record);)

保存的过程是:

  1. 得到表单的绑定对象“new_record = form.getRecord();”;
  2. 在把表单的更新信息写入绑定对象“form.updateRecord(new_record);”);
  3. 新建设一个orderBillAction 对象var priceAreaAction = new PriceAreaAction();接下来要注意的下面这一点:priceAreaAction.phantom = new_record.phantom

一定要把得到的表单绑定信息的phantom这个属性值给action对象,这样才可以完成action对象的save方法的请求选择,如果phantom是true,那么就是执行“create”,否则就就执行“update”。

绑定对象中绑定的信息只能是表单中的信息,不能是表格中的信息,也就是priceAreaModel对象只能更新得到表单中的信息,不能得到表格中的订单明细信息,而且提交的信息是直接注入到Action中,所以要对订单明细信息做特别的处理。就是执行“processAction (_action,_record,_store)”方法,把增删改的订单明细信息加入到PriceAreaAction对象中,还有订单信息也注入到对象中。

 

Js代码  
  1. /**  
  2.  * 用于处理提交数据  
  3.  *  
  4.  * @param _action  
  5.  * @param _record  
  6.  * @param _store  
  7.  * @returns  
  8.  */  
  9. function processAction(_action, _record, _store) {   
  10.     var _create = new Array();   
  11.     var _update = new Array();   
  12.     var _delete = new Array();   
  13.     var removed = _store.getRemovedRecords();   
  14.     var updated = _store.getUpdatedRecords();   
  15.     var newed = _store.getNewRecords();   
  16.     Ext.each(removed, function(record) {   
  17.         _delete.push(record.data);   
  18.     });   
  19.     Ext.each(updated, function(record) {   
  20.         _update.push(record.data);   
  21.     });   
  22.     Ext.each(newed, function(record) {   
  23.         _create.push(record.data);   
  24.     });   
  25.     _action.set('updatePriceEntrys', _update);   
  26.     _action.set('createPriceEntrys', _create);   
  27.     _action.set('deletePriceEntrys', _delete);   
  28.     _action.set('priceArea', _record.data);   
  29.     return _action;   
  30. }  
/**
 * 用于处理提交数据
 *
 * @param _action
 * @param _record
 * @param _store
 * @returns
 */
function processAction(_action, _record, _store) {
    var _create = new Array();
    var _update = new Array();
    var _delete = new Array();
    var removed = _store.getRemovedRecords();
    var updated = _store.getUpdatedRecords();
    var newed = _store.getNewRecords();
    Ext.each(removed, function(record) {
        _delete.push(record.data);
    });
    Ext.each(updated, function(record) {
        _update.push(record.data);
    });
    Ext.each(newed, function(record) {
        _create.push(record.data);
    });
    _action.set('updatePriceEntrys', _update);
    _action.set('createPriceEntrys', _create);
    _action.set('deletePriceEntrys', _delete);
    _action.set('priceArea', _record.data);
    return _action;
}

 

所以在PriceAreaAction这个model要定义增删改的区域价格明细信息属性与区域属性“'priceArea', 'updatePriceEntrys',

'createPriceEntrys','deletePriceEntrys'”,在方法中就要把增删改的信息分别set到PriceAreaAction对象中。

在model中定义一个proxy,信息如下:

 

Js代码  
  1. proxy : {   
  2.         type : 'ajax',   
  •         api : {   
  •             create : 'savePriceArea.action',   
  •             update : 'updatePriceArea.action'  
  •         },   
  •         writer : {   
  •             type : 'json'  
  •         },   
  •         reader : {   
  •             type : 'json'  
  •         }   
  •     }  
proxy : {
        type : 'ajax',
        api : {
            create : 'savePriceArea.action',
            update : 'updatePriceArea.action'
        },
        writer : {
            type : 'json'
        },
        reader : {
            type : 'json'
        }
    }

 

 

用PriceAreaAction对象的save方法,就会发一个create对应的URL(savePriceArea.action),用定义的writer把区域价格信息以JSON的格式写回到服务端。

修改过程说明: 

  1. 双击表格中的行(执行“createWin(record);”,得到订单修改页面,根据传入的record对象绑定表单,执行“priceForm.loadRecord(record);”进行绑定);
  2. 进行表单信息与表格信息的修改;
  3. 点击保存,得到表单的绑定对象“new_record = form.getRecord();”;
  4. 在把表单的更新信息写入绑定对象“form.updateRecord(new_record);”);
  5. 接下来的过程与新增的一样。 

在开发过程中可以要对日期进行处理,对日期做处理可以有如下正反向两种方式:

 

Java代码  
  1. /**  
  2.  * 修改date对象数据的JSON提交方式  
  3.  */  
  4. Ext.JSON.encodeDate = function(d) {   
  5.     return d.getTime();   
  • };   
  • /**  
  •  * 处理日期展现方式  
  •  * @param value  
  •  * @returns  
  •  */  
  • function changeToDate(value) {   
  •     if (value != null) {   
  •         var date = new Date(value);   
  •         return Ext.Date.format(date, 'Y-m-d H:i:s');   
  •     } else {   
  •         return null;   
  •     }   
  • };  
/**
 * 修改date对象数据的JSON提交方式
 */
Ext.JSON.encodeDate = function(d) {
    return d.getTime();
};
/**
 * 处理日期展现方式
 * @param value
 * @returns
 */
function changeToDate(value) {
    if (value != null) {
        var date = new Date(value);
        return Ext.Date.format(date, 'Y-m-d H:i:s');
    } else {
        return null;
    }
};

 

 

posted on 2012-05-31 14:02  shhqy82  阅读(2165)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3