我将Extjs与一个名为bryntom的框架一起使用,我遇到了一个问题,当我无法向网格面板添加任何行时,我尝试了许多解决方案,但都不起作用,我的代码如下:
1、模式:
Ext.define('Sch.examples.externaldragdrop.model.UnplannedTask', {
extend : 'Sch.model.Event',
fields : [
{ name : 'Duration', type : 'float' },
]
});
1.第一次读取json文件的存储:
Ext.define('Sch.examples.externaldragdrop.store.UnplannedTaskStore', {
extend : 'Ext.data.Store',
model : 'Sch.examples.externaldragdrop.model.UnplannedTask',
requires : [
'Sch.examples.externaldragdrop.model.UnplannedTask'
],
autoLoad : true,
proxy : {
url : 'data/requests.json',
type : 'ajax',
reader : { type : 'json' },
writer : {type : 'json'}
}
});
1.网格面板:
Ext.define('Sch.examples.externaldragdrop.view.UnplannedTaskGrid', {
extend : 'Ext.grid.GridPanel',
alias : 'widget.unplannedtaskgrid',
requires : [
'Sch.examples.externaldragdrop.store.UnplannedTaskStore',
'Sch.examples.externaldragdrop.view.UnplannedTaskDragZone'
],
cls : 'taskgrid',
title : 'Unplanned Tasks',
initComponent : function () {
Ext.apply(this, {
viewConfig : { columnLines : false },
store : new Sch.examples.externaldragdrop.store.UnplannedTaskStore(),
columns : [
{header : 'Task', sortable : true, flex : 1, dataIndex : 'Name'},
{header : 'Duration', sortable : true, width : 100, dataIndex : 'Duration'},
{header : 'TestField', sortable : true, width : 100, dataIndex : 'TestField'},
]
});
this.callParent(arguments);
},
afterRender : function () {
this.callParent(arguments);
// Setup the drag zone
new Sch.examples.externaldragdrop.view.UnplannedTaskDragZone(this.getEl(), {
grid : this
});
},
onDestroy: function() {
this.store.destroy();
this.callParent();
}
});
最后是我想要在面板中添加新行的应用程序代码:
var panelgrid = Ext.create('Sch.examples.externaldragdrop.view.UnplannedTaskGrid'),
unplanned = panelgrid.getStore(),
task = Ext.create('Sch.examples.externaldragdrop.model.UnplannedTask',
{"Id" : "t1", "Name" : "Fix bug", "Duration" : 4}
),
task2 = Ext.create('Sch.examples.externaldragdrop.model.UnplannedTask',
{"Id" : "t5", "Name" : "Fix bug", "Duration" : 4}
);
unplanned.add(task);
unplanned.add(task2);
alert(unplanned.getCount());
unplanned.load();
panelgrid.getView().refresh();
1条答案
按热度按时间xzabzqsa1#
解决方案:
1.调用Load()时,默认情况下会删除所有现有记录。解决方案是使用额外的“Options”参数。
Unplan ned.load({addRecords:true});
1.在存储配置中将autoload设置为FALSE。
来自ExtJS帮助:
Ext.data.Store.Load([Options]):
通过配置的代理将数据加载到存储区。这使用代理对代理使用的任何存储后端进行异步调用,自动将检索到的示例添加到Store中,并在需要时调用可选回调。
选项:对象/函数(可选)
配置对象,在加载之前传递到Ext.data.Operation对象。此外,可以指定addRecords:True以将这些记录添加到现有记录中,默认情况下首先删除商店的现有记录。
工作示例:
Grid.json
备注:
我已经用ExtJS4.2对此进行了测试。