在Ext JS中替换存储内容

时间:2011-10-30 22:54:06

标签: extjs

我需要为我正在进行的项目选择Ext JS,这是一个简单的问题,它已经浮出水面,我无法弄清楚:

这是我的代码:

var arrayData = [
    ['Jay Gar','MD'],
    ['Aaron Baker','CA'],
    ['Susan Smith','NY'],
    ['Mary Stein','KT'],
    ['John Zalupic','WA'],
];

var store = Ext.create('Ext.data.ArrayStore',{
    data: arrayData,
    fields: ['personName', 'state']
});

var grid = Ext.create('Ext.grid.Panel', {
    title: 'first grid',
    renderTo: Ext.getBody(),
    authoHeight:true,
    width: 250,
    store: store,
    autoScroll: true,
    columns: [
        { header: 'name', dataIndex: 'personName' },
        { header: 'st', dataIndex: 'state', sortable: false }
    ]
});

grid.getSelectionModel().on('selectionchange', function(sm, selectedRecord){
    var newData = [
        ['Poka Boka', 'VK'],
        ['Choko Mok', 'CA']
    ];      

    store.removeAll();
    store.add(newData);    
});       

所以基本上我用默认值填充网格,每当点击其中一个时,商店中的数据就会被新数据替换,这反过来会提示重新渲染网格面板。它确实有效,但有一个一致的问题:

当我点击任何元素时,newData值会在它要替换的数据下方闪烁,并且由于某种原因它会显示3行:第一行,第二行,然后是第一行。此外,我收到一条错误消息“未捕获的TypeError:无法读取未定义的属性'internalId'发生在此行:store.add(newData)。

知道可能导致它的原因吗?我正在使用Ext JS 4。 谢谢! 卢卡

1 个答案:

答案 0 :(得分:1)

add方法需要记录,并且您正在传递一个数组。 您应该创建商店记录类型的实例并迭代以根据需要创建任意数量的记录,然后将它们添加到商店。

这是一个例子:

var store=this.getStore();       
    var rt = store.recordType;
    var p = new rt({
        InvoiceLineNum: '',
        LineNumber:'',
        ItemDescription: '',
        Quantity: '',
        UnitPrice: '',
        UnitMeasure:'',
        TotalAmount:'',
        OrderDate:new Date()

    });

    this.stopEditing();
    store.insert(count, p);
    this.startEditing(count, 0);
    this.markEditableCells(count);

我在这里使用插入,但你也可以使用添加。