EXTJS Проблема с полем даты, пожалуйста, помогите - PullRequest
0 голосов
/ 26 мая 2011

У меня проблемы с попыткой выяснить, как это происходит. Я использую Extjs и AJAX с JsonStore из моего обратного вызова. Моя страница в ASP вызывает базу данных и возвращает некоторые поля, в этом поле есть Date, и эта дата возвращает правильную дату ex .: "date_creat_post": "29 \ u002F04 \ u002F2011 " ...

Теперь, когда я смотрю свой вывод из этого на моей странице в сетке данных, я получаю следующее:


04/05/2013 <----> возвращаемая в обратном вызове дата - 05.05.2011

06/05/2012 <----> дата, которую он возвращает в обратном вызове, - 06/05/2010

07/04/2012 <----> дата, которую он возвращает в обратном вызове, - 07/04/2010


Я посмотрел все, кто бросил мой код, чтобы увидеть, является ли это место, где я добавляю 1 год к дате. но не могу найти это. Я пытался понять это как минимум 2 дня.

Вот мой код:

    Ext.onReady(function(){

Ext.QuickTips.init();

// for this demo configure local and remote urls for demo purposes
var url = {
    local:  '',  // static data file
    remote: '../myurl.asp'
};

// configure whether filter query is encoded or not (initially)
var encode = true;

// configure whether filtering is performed locally or remotely (initially)
var local = false;

var PostStore = new Ext.data.JsonStore({
    // store configs
    autoDestroy: true,
    baseParams : {filter : '[{"type":"boolean","value":false,"field":"is_sent_post"}]'},// we start only with is_sent == false
    url:  url.remote,
    remoteSort: false,
    sortInfo: {
        field: 'date_creat_post',
        direction: 'DESC'
    },
    storeId: 'Post_Store',

    // reader configs
    idProperty: 'id_post',
    root: 'Post',
    totalProperty: 'totalcount',
    fields: [{
        name: 'id_post',
        type: 'number'
    }, {
        name: 'name_post',
        type: 'string'
    }, {
        name: 'date_creat_post',
        type: 'date'//,
        //dateFormat: 'Y-m-d H:i:s'
    }, {
        name: 'from_addr_post',
        type: 'string'
    }, {
        name: 'sender_name_post',
        type: 'string'
    }, {
        name: 'is_sent_post',
        type: 'boolean'
    }, {
        name: 'date_sending_post',
        type: 'date'//,
        //dateFormat: 'Y-m-d H:i:s'
    }, {
        name: 'html_post',
        type: 'string'
    }, {
        name: 'list_send_post',
        type: 'number'
    }],
    writer: new Ext.data.JsonWriter({
                                writeAllFields: true    
                                    }),
    autoSave: false,
    batch: true
});

var filters = new Ext.ux.grid.GridFilters({
    // encode and local configuration options defined previously for easier reuse
    encode: encode, // json encode the filter query
    local: local,   // defaults to false (remote filtering)
    filters: [{
        type: 'numeric',
        dataIndex: 'id_post'
    }, {
        type: 'string',
        dataIndex: 'name_post'
    }, {
        type: 'date',
        dataIndex: 'date_creat_post'
    }, {
        type: 'string',
        dataIndex: 'from_addr_post'
    }, {
        type: 'string',
        dataIndex: 'sender_name_post'
    }, {
        type: 'boolean',
        dataIndex: 'is_sent_post'
    }, {
        type: 'date',
        dataIndex: 'date_sending_post'
    }, {
        type: 'string',
        dataIndex: 'html_post'
    }, {
        type: 'numeric',
        dataIndex: 'list_send_post'
    }]
});    

// use a factory method to reduce code while demonstrating
// that the GridFilter plugin may be configured with or without
// the filter types (the filters may be specified on the column model
var createColModel = function (finish, start) {

    var columns = [{
        dataIndex: 'id_post',
        hidden:true,
        header: 'Id',
        // instead of specifying filter config just specify filterable=true
        // to use store's field's type property (if type property not
        // explicitly specified in store config it will be 'auto' which
        // GridFilters will assume to be 'StringFilter'
        filterable: true
        //,filter: {type: 'numeric'}
    }, {
        dataIndex: 'name_post',
        header: 'Subject',
        width: 150,
        id: 'postname',
        filter: {
            type: 'string'
            // specify disabled to disable the filter menu
            //, disabled: true
        }
    }, {
        dataIndex: 'date_creat_post',
        header: 'Date Created',
       renderer:  Ext.util.Format.dateRenderer('d/m/Y'),

        filter: {
            type: 'date'     // specify type here or in store fields config
        }            
    }, {
        dataIndex: 'from_addr_post',
        header: 'From Address',
        hidden:true,
        id: 'fromaddress',
        filter: {
            type: 'string'
            // specify disabled to disable the filter menu
            //, disabled: true
        }
    }, {
        dataIndex: 'sender_name_post',
        header: 'Sender Name',
        id: 'sendername',
        filter: {
            type: 'string'
            // specify disabled to disable the filter menu
            //, disabled: true
        }
    }, {
        dataIndex: 'is_sent_post',
        header: 'Status',
        filter: {
            type: 'boolean'  // specify type here or in store fields config
        },
        renderer: function(value) {
            var rtn = (value == 1) ? 'sent' : 'stand-by';
            return rtn
        }
    }, {
        dataIndex: 'date_sending_post',
        header: 'Sending Date',
        hidden:true,
        //renderer: Ext.util.Format.dateRenderer('d/m/Y'),
        filter: {
            type: 'date'     // specify type here or in store fields config
        }            
    }, {
        dataIndex: 'list_send_post',
        header: 'Opticians list',
        hidden:true,
        id: 'optlist',
        filter: {
            type: 'number'
            // specify disabled to disable the filter menu
            //, disabled: true
        }
    }];

    return new Ext.grid.ColumnModel({
        columns: columns.slice(start || 0, finish),
        defaults: {
            sortable: true
        }
    });
};
/*
//======================contextMenu triggered by right click========================================
*/

var doRowCtxMenu = function ( thisGrid, rowIndex,cellIndex, evtObj )
{
    //Ext.popup.msg('Done !', 'Right clicked !');   
    evtObj.stopEvent();
    var sm = thisGrid.getSelectionModel();
    var records = sm.getSelections(); // returns an array of Ext.data.Records

    try
    {
        //var r = records[0]; // get the 1st Ext.data.Record of the list
        thisGrid.rowCtxMenu = new Ext.menu.Menu({
            items: [{
            text    : '<span style="color:red;">Delete Selected Email ?</span>',
            handler : function ()   {
                                    deletePost(records,thisGrid);
                                    }
                    }]
        });
        thisGrid.rowCtxMenu.showAt(evtObj.getXY());
    }
    catch(err)
    {
        Ext.popup.msg('Warning !', 'You need to select a row first !'); 
    }
};
/*
//======================END contextMenu triggered by right click========================================
//======================Delete Post Fonction =================================================
*/
function deletePost(records,thisGrid)
{

    Ext.Msg.show({
        title   :'Warning !',
        msg     : 'You are about to delete 1 email !',
        buttons : Ext.Msg.YESNOCANCEL,
        fn      : function(btn){
                    if (btn=='yes')
                    { 
                        var store = thisGrid.getStore();
                        var s = thisGrid.getSelectionModel().getSelections();
                        for(var i = 0, r; r = s[i]; i++){
                            store.remove(r);
                        }
                        store.proxy.conn.url = '../myurl.asp';
                        store.save();
                        lastOptions = store.lastOptions;
                        /*Ext.apply(lastOptions.params, {
                        //myNewParam: true
                        });*/
                        store.load(lastOptions);
                    }
    },
        animEl  : 'elId'
    }); 
}
 /*
//======================End delete Function========================================
*/
var Postgrid = new Ext.grid.GridPanel({
    id:'post_grid',
    border: false,
    width: 462,
    height:250,
    store: PostStore,
    colModel: createColModel(8),
    loadMask: true,
    viewConfig:{
    emptyText:'No Post to display, change/clear your filters, refresh the grid or add a new Email!'
    },
    plugins: [filters],
     sm: new Ext.grid.RowSelectionModel({
                 singleSelect: true,
                 listeners: {
                 rowselect: function(sm, row, rec) {
                                    Ext.getCmp("post_form").getForm().loadRecord(rec);
                                    //Ext.getCmp("htmlEdit").setValue("sdcdsdcdscsdc");
                                                    }
                             }
    }), 
    //autoExpandColumn: 'company',
    listeners: {
        cellcontextmenu : doRowCtxMenu,
        render: {
            fn: function(){
                PostStore.load({
                    params: {
                        start: 0,
                        limit: 50
                    }
                });
            }
        }
    },
    bbar: new Ext.PagingToolbar({
        store: PostStore,
        pageSize: 50,
        plugins: [filters]
    })
});

// add some buttons to bottom toolbar just for demonstration purposes
Postgrid.getBottomToolbar().add([
    '->',
    {
        text: 'Clear Filter Data',
        handler: function () {
            Postgrid.filters.clearFilters();
        } 
    }   
]);
var panelGrid = new Ext.Panel({
            width : 462,
            height : 250,
            layout : 'fit',
            renderTo: 'post-grid',
            items: Postgrid
                        });

   });

я передам обратный звонок в firebug json:

    {"totalcount":3, "Post": [{"id_post": 83,"name_post": "ghfgh","date_creat_post": "29\u002F04\u002F2011","from_addr_post": "fgh@sdf.com","sender_name_post": "gfh","is_sent_post": false,"date_sending_post": "29\u002F04\u002F2011","html_post": "<p>dfgdgdgd<\u002Fp>","list_send_post": null},{"id_post": 61,"name_post": "thomas test","date_creat_post": "28\u002F07\u002F2010","from_addr_post": "","sender_name_post": "","is_sent_post": false,"date_sending_post": "28\u002F07\u002F2010","html_post": "<p>test test test ets<\u002Fp>","list_send_post": null},{"id_post": 59,"name_post": "kevin test","date_creat_post": "29\u002F06\u002F2010","from_addr_post": "kevin@art-systems.net","sender_name_post": "kevin@art-systems.net","is_sent_post": false,"date_sending_post": "29\u002F06\u002F2010","html_post": "<p>jkljljoi ioijiio ijiojio oijio joijoi<\u002Fp>\u000A<p>&nbsp;<\u002Fp>\u000A<p><span style=\u0022background-color: #ffffff;\u0022>igiuihhuhi<\u002Fspan><\u002Fp>","list_send_post": null}]}

Заранее спасибо, я надеюсь, что некоторые в злой сети могут помочь мне ....

веселит.


так что после многих попыток дать решение я пришел к этому есть проблема наконец, пример даты после многих попыток отформатировать и вставить в мою базу данных msSQL эта проблема является проблемой: 13.09.09 (д / м / г) становится этим 09/01/2012 (д / м / г), поэтому по какой-то причине 13-й месяц добавляется к месяцу, так сказать 13 не существует, поэтому дата отправится на 01.09.2012 ....

, посмотрев снова, этот формат выглядит не очень хорошо, поэтому я изменил его de (m / d / Y), и теперь я получаю сообщение об ошибке sql, когда нажимаю 13 дней в поле даты в (extjs).

"Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона."

и у кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 26 мая 2011

Вместо использования встроенного Ext.util.Format.dateRenderer, вы можете попробовать создать свой собственный, который анализирует дату по своему усмотрению.

ataIndex: 'date_creat_post',
    header: 'Date Created',
   renderer:  daterenderer

А затем функция для вашего daterenderer:

function dateRenderer(value, id, r) {
 var myDate = r.data['date_creat_post'];
 // do some things here to strip out the date and make it into a happy format
 var d = new Date(myDate);
 return d.format('d/m/Y');
}
...