extjs如何通过拆分和合并旧商店获得新商店

时间:2017-12-19 09:54:29

标签: extjs

我正在尝试从现有商店创建一个新商店,比如说

我有一个现有商店“store1”,其数据如下:

{ 
 ['field1':';1;2;ab;c;de;', 'field2': 'value2', ...], 
 ['field1':';2;ab;e;', 'field2': 'value2x', ...]
}

现在我想创建一个新商店“store2”,其记录如下:

 { 
  ['field1':'ab'],
  ['filed1': 'c'],
  ['filed1': 'de'],
  ['filed1': 'e']
 }

“store2”只有field1,没有重复值,只有非数字值。

任何人都可以帮助我并告诉我如何实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

为此,您需要使用store1.each()方法将add新值导入store2

FIDDLE 中,我使用两个store's创建了一个演示。我希望这能帮助您达到您的要求。

//Store 1
Ext.create('Ext.data.Store', {
    storeId: 'store1',
    fields: ['field1', 'field2'],
    data: [{
        'field1': ';1;2;ab;c;de;',
        'field2': 'value2'
    }, {
        'field1': ';2;ab;e;',
        'field2': 'value2x'
    }]
});
//Store 2
Ext.create('Ext.data.Store', {
    storeId: 'store2',
    fields: ['field1']
});
//create panel
Ext.create('Ext.panel.Panel', {
    title: 'new store by split and merge the old store',
    layout: 'vbox',
    bodyPadding: 10,
    margin: 10,
    itemId: 'myPanel',
    width: 300,
    renderTo: Ext.getBody(),
    defaults: {
        xtype: 'grid',
        scrollable: 'y',
        width: '100%',
        flex: 1
    },
    items: [{
        title: 'Grid one',
        itemId: 'grid1',
        store: Ext.data.StoreManager.lookup('store1'),
        columns: [{
            text: 'Field 1',
            dataIndex: 'field1',
            flex: 1
        }, {
            text: 'Field 2',
            dataIndex: 'field2',
            flex: 1
        }],
        buttons: [{
            text: 'Create store 2 from Store 1',
            handler: function () {
                var panel = this.up('#myPanel'),
                    store1 = panel.down('#grid1').getStore(),
                    store2 = panel.down('#grid2').getStore(),
                    arr;
                store1.each(function (rec) {
                    arr = rec.get('field1').split(';') || []; //Split value with {;}
                    arr.forEach(function (v) { //do loop for insert no duplicate values, and only non-numeric values.
                        if (v && isNaN(v) && !store2.findRecord('field1', v)) {
                            store2.add({ //add new value in Store2
                                field1: v
                            })
                        }
                    });
                });
                panel.down('#grid2').show();
                this.setDisabled(true);
            }
        }]
    }, {
        hidden: true,
        title: 'Grid two',
        itemId: 'grid2',
        margin: '10 0',
        store: Ext.data.StoreManager.lookup('store2'),
        columns: [{
            text: 'Field 1',
            flex: 1,
            dataIndex: 'field1'
        }]
    }]
});