2016-09-21 15 views
0

私は、単純なコンボボックスの内部にあるインラインストアを持っています。このストアには、デフォルトのインラインデータがあります。今私は、ストアが作成され、このイベントがストアにあるデータを私に供給する必要があると解雇されるイベントを探しています。ExtJs:ストアの作成時にストアデータを取得する

私はこのようにそれを試してみました:

Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose', 
    store: { 
     autoLoad: true, 
     fields: [ 
      {name: 'name', type: 'string'} 
     ], 
     data : [ 
      {"name":"TestName_A"}, 
      {"name":"TestName_B"}, 
      {"name":"TestName_C"}, 
     ], 
     listeners: { 
      load: function(store) { 
       let records = store.getData() 
       records.forEach(record => { 
        console.log(record.getField('name')) 
       }) 
      } 
     } 
    }, 
    queryMode: 'local', 
    valueField: 'name', 
    displayField: 'name', 
    renderTo: Ext.getBody() 
}); 

しかし、それは動作しません。 store.getData()は私のレコードを含んでいないようです。 https://fiddle.sencha.com/?fiddle=v7#fiddle/1h53

+0

がstore.getDataに()関数で、あなたの負荷にあなたのコードを変更するには、()のアイテムは、あなたの記録を受信します。 – xdn

+0

空の配列を返し、しばらくしてから空になると突然3つのコンストラクタが含まれます。 WTF? https://fiddle.sencha.com/?fiddle=v7#fiddle/1h74(デバッガブレークポイントがヒットした場合、配列は空です。実行を再開すると、コンストラクタの配列が含まれます) – Forivin

+0

ストアレコードは、 'store.each'を使用します。また、 'getField'はフィールド設定を返します。おそらく' get'が必要です。 –

答えて

0

使用この今ストアショーコンソールデータ:

Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose', 
    queryMode: 'local', 
    valueField: 'name', 
    displayField: 'name', 
    renderTo: Ext.getBody(), 
    listeners: { 
     afterrender: function(me) { 

      var store = Ext.create('Ext.data.Store', { 
       //autoLoad: true, 
       fields: [ 
        {name: 'name', type: 'string'} 
       ], 
       data : [ 
        {"name":"TestName_A"}, 
        {"name":"TestName_B"}, 
        {"name":"TestName_C"}, 
       ], 
       listeners: { 
        datachanged : function(store) { 
         Ext.each(store.data.items,function(rec){ 
          console.log(rec.data.name); 
         }); 
        } 
       } 
      }); 
      me.setStore(store); 
      store.load(); 
     } 
    }, 
}); 
0

私は最終的にそれがコンボボックスがレンダリングされます後にストアにアクセスすることで問題を解決するために管理:

は私のバイオリンあります https://fiddle.sencha.com/?fiddle=v7#fiddle/1h7c

Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose', 
    store: { 
     autoLoad: true, 
     fields: [ 
      {name: 'name', type: 'string'} 
     ], 
     data : [ 
      {"name":"TestName_A"}, 
      {"name":"TestName_B"}, 
      {"name":"TestName_C"}, 
     ], 
    }, 
    queryMode: 'local', 
    valueField: 'name', 
    displayField: 'name', 
    renderTo: Ext.getBody(), 
    listeners: { 
     afterrender: function(me) { 
      let store = me.getStore() 
      console.log("Event fired!") 
      store.each(record => { 
       console.log(record.get('name')) 
      }) 
     } 
    }, 
}); 
0
あなたは簡単のafterrenderストアを作成することによってこれを行うことができます

コンボボックスとコンボボックスにストアを設定します。

 
Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose', 
    queryMode: 'local', 
    valueField: 'name', 
    displayField: 'name', 
    renderTo: Ext.getBody(), 
    listeners: { 
     afterrender: function(me) { 

      var store = Ext.create('Ext.data.Store', { 
       autoLoad: true, 
       fields: [ 
        {name: 'name', type: 'string'} 
       ], 
       data : [ 
        {"name":"TestName_A"}, 
        {"name":"TestName_B"}, 
        {"name":"TestName_C"}, 
       ], 
       listeners: { 
        load: function(store) { 
         Ext.each(store.data.items,function(rec){ 
          console.log(rec.data.name); 
         }); 
        } 
       } 
      }); 
      me.setStore(store); 
     } 
    }, 
}); 
+0

それは動作しません。コンソールに何も印刷されません。 – Forivin

+0

これは、プロキシを使用するときにストアの負荷が働いているためです。あなたの場合、ストアデータは静的です。それがロード関数が呼び出されない理由です。 –

+0

コメントするautoLoad:true; およびme.setStore(store)の後にstore.load()を追加します。 –

関連する問題