2016-10-01 5 views
2

フォームで自動的にViewControllerからメソッドを実行することは可能ですか?私は、このコントローラからのデータに基づいているべきcheckboxgroupを作成する必要があります。 ViewControllerのこのメソッドでは、JSONファイルからデータを取得していますが、ここではビューを更新しています。私は私の見解でリスナー内のボタンを持っているとき、すべてがOKですが、それは自動的に実行する必要があり、そしてcheckbox'esこのストアデータExtJs 6.2のストアに基づいてチェックボックスグループを構築する方法

onClickLoadData: function(){ 
     console.log('onClickLoadData runned'); 
     var gridStore = this.getStore('perosnellstore'); 
     var columnsArray = this.getStore('perosnellstore').getProxy().getReader().rawData.cols.columns; 

     console.log(columnsArray.length); 

     for(var i = 0; i < columnsArray.length; i++){ 
      var checkbox = Ext.create('Ext.form.field.Checkbox', { 
       boxLabel: columnsArray[i].text, 
       x: 0, 
       y: i * 30 
      }); 
      Ext.ComponentQuery.query("#checkBoxGroupModules")[0].add(checkbox); 
     } 
    } 

とのViewModelクラスに基づいて構築する必要があります:

Ext.define('Message.web.view.edit.EditViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.edit', 

    data:{ 
     title: '' 
    }, 
    stores : { 
     perosnellstore: { 
      fields : ['name'], 
      autoLoad: true, 
      proxy: { 
       type: 'ajax', 
       url : 'resources/response.json', 
       reader: { 
        type: 'json', 
        rootProperty: 'cols.columns', 
        keepRawData: true 
       } 
      } 
     } 
    } 


}); 
+0

自動的に実行されるとはどういう意味ですか?いつ実行する必要がありますか?何回ですか? –

+0

1回、ビューをロードした後。私は構成ストアに問題があるので、私はこのようにしましたが、それが正しいかどうかはわかりません。 initComponentメソッドを使用しようとしましたが、このメソッドはアプリケーションの開始後に呼び出されます。 – Algeroth

答えて

1

答えは店内のリスナーです。

var myStore = Ext.create('Ext.data.Store', { 
    ... 
    listeners: { 
    'load': { 
     fn: function(store, records, success, operations) { 
     Ext.each(records, function(rec) { 
      console.log(Ext.encode(rec.raw)); 
     }); 
     } 
    } 
    } 
    ... 
}); 
-1

viewControllerでは、ストアを聴くことができます。 Doc:http://docs.sencha.com/extjs/6.2.0/classic/Ext.app.ViewController.html#cfg-listen

リモートデータがロードされると、ストアがイベントを発生させます。 Doc:http://docs.sencha.com/extjs/6.2.0/modern/Ext.data.Store.html#event-load

ストアのロードイベントをリッスンし、onClickLoadDataを呼び出します。

コード:

Ext.define('AM.controller.Users', { 
    extend: 'Ext.app.Controller', 

    listen: { 
     store: { 
      '#storeId': { 
       load: 'onClickLoadData' 
      } 
     } 
    } 
}); 
+0

それは仕事ではありません:(この方法はこのように呼び出されません。 – Algeroth

関連する問題