Когда я нажимаю на дату в своем сборщике даты, я вижу, что запрос отправляется на мой сервер, выполняется запрос, возвращается результат, но моя сетка кажется, не обновляется ....?!?! Я боролся с изучением этой структуры кадра 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}
Можете ли вы опубликовать свой ответ JSON? И, возможно, ваш код + данные JSON на [Sencha's Fiddle] (https://fiddle.sencha.com/#home)? – incutonez
Я добавил свой пакет JSON. Я еще не использовал Fiddle, поэтому мне нужно будет посмотреть, как это сделать. – SnickerBooze
Итак, у меня наконец появился рабочий пример ... вы можете получить доступ к нему [здесь] (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