web-dev-qa-db-ja.com

ExtJS4のストアからデータをリロードする

私は店を持っています:

var store = new Ext.data.store({
                autoLoad: true,
                autoSync: true,
                model: 'myModel',
                proxy: {
                    type: 'rest',
                    url: '/url/to/my/json/encoded/results',
                    reader: {
                        type: 'json',
                        root: 'results'
                    },
                    writer: {
                        type:'json'
                    }
                }
            });

これらの結果を表示するグリッドのストアはどれですか。私のグリッドは次のように構成されています。

var myGrid = new Ext.grid.Panel({
                id:'myGridID',
                layout:'anchor',
                border:false,
                title:'My Grid',
                width:412,
                store:store,
                heigth:300,
                frame:false,
                .... etc

ある時点で、データベースにエントリを追加します。これは問題なく機能します(ページをリロードすると、グリッドに新しく追加されたレコードが表示されます)。グリッドをリロードして、そのエントリをデータベースに保存すると、ストアとグリッドが更新され、ページ全体を再度リロードしなくても、新しく追加されたレコードが表示されます。

私は試した:

Ext.getCmp('myGridID').getStore().reload();

そして...

Ext.getCmp('myGridID').getStore().load();

そして...

Ext.getCmp('myGridID').getView().refresh();

また、ストアをExt.data.JsonStoreとして設定しようとしましたが、何も実行されません。

しかし、何も機能しません。私はこれをインターネット全体で検索して失敗しました。

どんな助けでも大歓迎です。

6
martskins

これは間違いなく機能するはずです:

Ext.getCmp('myGridID').getStore().load();

上記の構文を使用すると、JavaScriptエラーが発生しますか?もしそうなら、特定のエラーメッセージを見ることはいくつかの手がかりを与えるかもしれません。

また、常に常にChrome開発者ツール(またはFirefox/IEが好きな場合はFirebugまたはIE開発者ツールバー))を使用します。この場合、次のことを確認する必要があります。 AJAXリクエストは/ url/to/my/json/encoding/resultsに送信されます。これにより、少なくともストアを更新するための呼び出しがサーバーに送信されているかどうかがわかります。

私の推測ではそうではなく、エラーメッセージが生成されている可能性があります。おそらく「未定義のメソッド 'getStore'を呼び出せません」の行に沿った何か

これにより、少なくともグリッドへの参照を正常に取得していないことがわかります。そこから、別の要素またはそのようなばかげたものに「myGridID」を複製していないことを確認します。

Chrome開発者ツールコンソールにいくつかの情報を出力して、デバッグに役立てることができます。

console.log(Ext.getCmp('myGridID'));

未定義かどうかを確認するか、グリッドへの参照を返します。未定義の場合は、IDを複製しているか、コンポーネントが実際に作成される前にグリッドを再読み込みしようとしている可能性があります(アプリケーションのより大きなコンテキストでコードを確認すると、それを判断するのに役立ちます)。

グリッドコンポーネントへの参照が正常に返される場合は、次の行を続けます。

console.log(Ext.getCmp('myGridID').getStore());

とにかく、それはおそらくあなたがおそらく今までにすでに解決したことについてはあまりにも多くの説明です。多分それは他の誰かに役立つでしょう。

16
rhinst

これを試してみてくださいバージョンでテストした私のために働いた.x

Ext.getCmp( 'idMyGrid')。store.load();

また、あなたは使用することができます

Ext.getCmp( 'idMyGrid')。store.reload();

ロードストアリクエストでパラメータを渡したい場合

Ext.getCmp( 'idMyGrid')。store.load({params:{paramName:paramValue}});Ext.getCmp( 'idMyGrid')。store.reload({params:{paramName:paramValue}});

9

データをリロードする場合は、変更を確認する必要があります。つまり、このコードをまとめます。

 Ext.getCmp('idMyGrid').getStore().load();
 Ext.getCmp('idMyGrid').getView().refresh();

これは私のための仕事です。それがあなたにも役立つことを願っています。

チリのチョリソ、サルードから。

2
Loko Fer

私のコードを参照してください:

var response = Ext.decode(result); //どこかからのJSON

store.proxy = new Ext.ux.data.PagingMemoryProxy(response);

grid.store =ストア;

store.load({params:{開始:0、制限:20}});

grid.getView()。refresh();

0
Yuttapol