我正在尝试从现有商店创建一个新商店,比如说
我有一个现有商店“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
,没有重复值,只有非数字值。
任何人都可以帮助我并告诉我如何实现这一目标吗?
答案 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'
}]
}]
});