2014-01-15 2 views
0

Когда я нажимаю на дату в своем сборщике даты, я вижу, что запрос отправляется на мой сервер, выполняется запрос, возвращается результат, но моя сетка кажется, не обновляется ....?!?! Я боролся с изучением этой структуры кадра MVC, и я не могу поверить в кривую обучения. Кажется, простейшие вещи нелегко сделать, и при поиске в сети есть похожие записи, но каждый из них немного отличается от того, что я пытаюсь сделать, или плакат имеет код в другом месте или не использует шаблон MVC ..... blah blah blah ....ExtJS4.Grid не обновляется после фильтрации с помощью DatePicker - NewbieQ

Первая поездка на мой сервер, которая заполняет мой магазин запросом, и эта сетка прошла успешно - проблем нет. В этот момент, если я выбираю дату из моего выбора даты, вызов выполняется в БД, и запрос отправляется обратно с моим пакетом JSON - проблем нет. Я проверил, что пакет JSON в первом запросе соответствует второму и последующим запросам, и все проверяется в тот момент, когда проверяется с помощью хром-консоли и сетевых инструментов.

Любая помощь с благодарностью. Заранее спасибо!

Магазин Пользователь:

Ext.define('AM.store.Users', { 
extend: 'Ext.data.Store', 
model: 'AM.model.User', 
autoLoad: true, 
autoSync:true, 
pageSize:50, 
proxy: 
{ 
    type: 'ajax', 

    api: 
    { 
     read: 'http://192.168.0.103/testit/dao_2.cfc?method=getContent', 
     update: 'http://192.168.0.103/testit/dao_2-post.cfc?method=postContent' 
    }, 
    reader: 
    { 
     type: 'json', 
     root: 'data', 
     successProperty: 'success', 
     totalProperty : 'dataset', 
     remoteFilter : true 
    }, 

    listeners: 
    { 
     // stuff goes here 
    }, 
} 

Дата Магазин:

Ext.define('AM.store.dates', { 
extend: 'Ext.data.Store', 
model: 'AM.model.date', 
autoLoad: true, 
autoSync:true, 
pageSize:1000, 
proxy: 
{ 
    type: 'ajax', 
    api: 
    { 
     read: 'http://192.168.0.103/testit/dao_2.cfc?method=getContent', 
     update: 'http://192.168.0.103/testit/dao_2-post.cfc?method=postContent' 
    }, 
    reader: 
    { 
     type: 'json', 
     root: 'data', 
     successProperty: 'success', 
     totalProperty : 'dataset', 
     remoteFilter : true 
    }, 

    listeners: 
    { 
     // stuff goes here 
    } 

пользователя Модель:

Ext.define('AM.model.User', { 
extend: 'Ext.data.Model', 
fields: [ 
     {name: 'message_id',type: 'textfield'}, 
     {name: 'recip_email',type: 'textfield'}, 
     {name: 'unix_time_stamp',type:'datefield', dateFormat: 'Y-m-d H:i:s'} 
     ] 
}); 

Модель Дата:

Ext.define('AM.model.date', { 
extend: 'Ext.data.Model', 
fields: [ 
     {name: 'message_id',type: 'textfield'}, 
     {name: 'recip_email',type: 'textfield'}, 
     {name: 'unix_time_stamp',type:'datefield', dateFormat: 'Y-m-d H:i:s'} 
     ] 
}); 

Сетка Группа:

Ext.define('AM.view.user.List' ,{ 
extend: 'Ext.grid.Panel', 
alias: 'widget.userlist', 
title: 'All Users', 
store: 'Users', 
plugins:[Ext.create('Ext.grid.plugin.RowEditing', {clicksToEdit: 1})], 
dockedItems: [{ xtype: 'pagingtoolbar', 
       store: 'Users', 
       dock: 'bottom', 
       displayMsg: 'Displaying Records {0} - {1} of {2}', 
       displayInfo: true}], 


initComponent: function() { 

    this.columns = [ 
        Ext.create('Ext.grid.RowNumberer', 
         { 
         resizable: true, 
         resizeHandles:'all', 
         align: 'center', 
         minWidth: 35, 
         maxWidth:50 
         }), 
        { 
        header: 'Name', 
        dataIndex: 'message_id', 
        flex: 1, 
        editor:'textfield', 
        allowBlank: false, 
        menuDisabled:true 
        }, 
        { 
        header: 'Email', 
        dataIndex: 'recip_email', 
        flex: 1, 
        editor:'textfield', 
        allowBlank: false, 
        menuDisabled:true 
        }, 
        { 
        header: 'Date Time', 
        dataIndex: 'unix_time_stamp', 
        width: 120, 
        menuDisabled:true, 
        renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s'), 
        field:{ xtype:'datefield', 
          editor: new Ext.form.DateField({format: 'Y-m-d'}) } 
        }]; 


    this.callParent(arguments); 

} 


}); 

Контроллер:

Ext.define('AM.controller.Users', { 
extend: 'Ext.app.Controller', 
stores:['Users', 'dates'], 
models:['User', 'date'], 
views: ['user.List','user.Edit'], 


init: function() { 

    Ext.getStore('dates').addListener('load',this.ondatesStoreLoad, this); 

    this.control(
    { 

     'viewport > userlist': 
     { 
      itemdblclick: this.editUser, 
     }, 

     'useredit button[action=save]': 
     { 
      click: this.updateUser 
     }   

    }); 

}, 


// ---------- handler Function declarations ------------- 

ondatesStoreLoad: function(me,records,success) 
{ 

// ------ Gets the dates from dates store and loads an array 
var store = this.getStore('dates'); 
sendDataArray = []; 

store.each(function(record){ 
    var recordArray = [record.get("unix_time_stamp")]; 
    sendDataArray.push(recordArray); 
});   


// ------ Set DatePicker here --------// 

var dtFld = Ext.ComponentQuery.query('#datePickerFld')[0]; 

//dtFld.setDisabledDates(["^(?!"+sendDataArray.join("|")+").*$"]); 
dtFld.setMaxDate(new Date()); 

var wstPnlReg = Ext.ComponentQuery.query('#westPanelRegion')[0]; 
wstPnlReg.show(); 

var ctrPnlReg = Ext.ComponentQuery.query('#centerPanelRegion')[0]; 
ctrPnlReg.show(); 

}, 


editUser: function(grid, record) 
{ 
    var view = Ext.widget('useredit'); 
    view.down('form').loadRecord(record); 
}, 

updateUser: function(button) 
{ 
    var win = button.up('window'), 
     form = win.down('form'), 
     record = form.getRecord(), 
     values = form.getValues(); 

    record.set(values); 
    win.close(); 
    this.getUsersStore().sync(); 
}, 

}); 

JSON Пакет:

{"success":true,"data":[{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:05","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:06","recip_email":"test[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:07","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:07","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:08","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:09","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:09","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:09","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:09","recip_email":"[email protected]"},{"message_id":"M42712027","unix_time_stamp":"2013-09-26 00:08:09","recip_email":"[email protected]"}],"dataset":10} 
+0

Можете ли вы опубликовать свой ответ JSON? И, возможно, ваш код + данные JSON на [Sencha's Fiddle] (https://fiddle.sencha.com/#home)? – incutonez

+0

Я добавил свой пакет JSON. Я еще не использовал Fiddle, поэтому мне нужно будет посмотреть, как это сделать. – SnickerBooze

+0

Итак, у меня наконец появился рабочий пример ... вы можете получить доступ к нему [здесь] (https://fiddle.sencha.com/#fiddle/2mi). Пройдя ваш пример, мне интересно, проблема в том, что ваша панель «grid panel» и «панель подкачки» используют два разных магазина ... потому что вы передаете строковое значение. Я бы попытался создать хранилище и скопировать его в переменную, а затем поставить ту же самую переменную как в хранилище сетки, так и в хранилище панели поискового вызова.Кроме того, если вы посмотрите на [API] (http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.grid.Panel-cfg-store), свойство store не принимает строка. – incutonez

ответ

Смежные вопросы