0

サーバーから返されたデータに基づいてフォームを動的に構築しようとしています。<PROJECT NAME>/storeこの例では、フォルダーに自分のストアがありません。私はそれを持ってい<PROJECT NAME>/store/adminます。次のように定義されます。

Ext.define('APP.store.admin.TaskOption', {
extend: 'Ext.data.Store',
autoLoad: false,
storeId: 'adminTasksOptions',
model: 'APP.model.admin.TaskOption',
sorters: [
    { property: 'order', direction: 'ASC' }
]
});

注意してくださいstoreId

コントローラーで、initメソッドでこれを試しましたが、機能しませんでした (つまり、taskOptionsLoaded メソッドを呼び出しませんでした。

      Ext.create('APP.store.admin.TaskOption');

      this.getAdminTasksOptionStore().on({
          scope: this,
          load : this.taskOptionsLoaded
      });

this.getAdminTaskOptionStoreまた、ブレークポイントを実行してチェックすると、正しいストアが返されたことにも注意してください。ストアをサブフォルダーに入れているので、それが起こっていると思いますか? 確かではありませんが、フォルダー構造を再編成してそれらすべてをstoreフォルダーに入れる代わりに (私はたくさんのストアを持っています; 大規模なプロジェクトです)、次の人が簡単にファイルを整理できるようにするための解決策を見つけようとしています.

だから今私はこれを試しましたが、これもうまくいきません。これは、同じコントローラー内のメソッドで実行されています。

Ext.getStore('adminTasksOptions').load(
        {'params' : {'t_id' : this.selectedTaskTemplate},
        callback: function(store, records, success) {
            this.taskOptionsLoaded(store, records, success);
        }
    },this);

行にブレークポイントを設定するとthis.taskOptionsLoaded、それはコントローラー ( ) スコープではなく、ストア スコープ内にありthisます。

ロード コールバックを独自のストアに追加しstoreId、コントローラーのスコープ内でメソッドを実行する最もクリーンな方法は何ですか?

それが理にかなっていることを願っています。

4

2 に答える 2

1

コントローラーに config がある場合、stores: ['AdminTasksOptionStore']という getter が生成されgetAdminTasksOptionStore()ます。

あなたがいるという事実storeIdadminTasksOptions、ExtJS がコントローラーでゲッターを生成するという意味ではありません。ただし、できますExt.data.StoreManager.lookup('adminTasksOptions')

コントローラーに次のものが必要です。

stores: ['TaskOption'],

そして、コントローラーには getter がありますgetTaskOptionStore()

負荷スコープに関して、間違った変数を使用しています。実際には次のようにする必要があります。

Ext.getStore('adminTasksOptions').load({
    scope: this,
    params: {'t_id' : this.selectedTaskTemplate},
    callback: function(store, records, success) {
        this.taskOptionsLoaded(store, records, success);
    }
});
于 2012-08-11T13:14:23.140 に答える
0

I think you're using on() function wrong. Try this:

this.getAdminTasksOptionStore().on(
  'load', // event
  this.taskOptionsLoaded, // handler
  this // scope
);
于 2012-08-11T12:30:58.963 に答える