2017-12-19 13 views
0

をマージExtJSのは、私のようなデータを持っている既存店「store1」を持っている私は、既存のストアから新しいストアを作成しようとしていますどのように私は、分割して、新しい店舗を取得することができますし、古い店舗

を言います: 「store2は」だけfield1、無重複する値、および唯一の非数値を持っています

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

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

は、今私は次のようにレコードに新店舗「store2」を作成します。

誰でも私を助け、私がこれをどのように達成できるか教えてもらえますか?

+0

文法と書式の変更。 – a1626

答えて

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' 
     }] 
    }] 
}); 
+0

ありがとう@Njdhv、それは私の質問を解決しました。 – Cheng

+0

良い、主に歓迎:) –

関連する問題