現在、新しいパラメーターでjsonストアをリロードするのに問題があります。これが私の店です:
_ newsletters = new Ext.data.JsonStore({
url: '/newsletters/',
root: 'results',
fields: [
'id',
'body'
'recipients'
],
baseParams: { command: 'json', to: dateTo, from: dateFrom },
autoLoad: true
});
_
dateToとdateFromは最初は空の文字列( '')であり、firebug/newslettersのチェックインは正しいパラメーターで呼び出されます。
次のテクニックはどれも機能しません。
DateToとdateFromの値を変更してから、newsletters.reload()を呼び出すと、空の文字列である、または空の文字列であるパラメータを使用してページが呼び出されます。
newsletters.reload( { to: 'test1', from: 'test2' } );
を呼び出しても、パラメーターは空の文字列として認識されます。
最後に、マニュアルから私が試しました:
_lastOptions = newsletters.lastOptions;
Ext.apply(lastOptions.params, {
to: 'test1',
from: 'test2'
});
newsletters.reload(lastOptions);
_
これも、更新されたパラメーターを使用して/ newslettersを要求しません。
どんなアドバイスでも大歓迎です!
実際にparamsオブジェクトをload()メソッドに渡すことができます
newsletters.load({
params: {to: 'test1', from: 'test2'}
})
ドキュメントから、あなたはおそらく行うことができます:
store.setBaseParam('to', dateTo);
さて、私が正しく理解していれば、dateToとdateFromが変更されるたびにbaseParamsが変更されるようにしてください。
あなたは試すことができます:
var dateTo = '', dateFrom = '';
store.on('beforeload', function(s) {
s.setBaseParam('to', dateTo);
s.setBaseParam('from', dateFrom);
});
// This should work :
dateTo = 1;
dateFrom = 2;
store.load();
私の問題は、プロキシ経由でバックエンドにデータを要求するストアがあることでした。このリクエストは、filter
という名前のパラメーターを保持する必要があります。これは、クライアントが関心を持っている結果のセットを決定するためのバックエンドに役立ちます。このパラメーターは、Combobox
またはその他のパラメーターからロードされますユーザーが使用するフィルターを表現するために使用できるコンポーネント。
私の観点からは、パラメーターをStoreに設定したり、loadパラメーターを使用したりしないでください。理由を説明します。
load
メソッドを明示的に使用するたびに、したくないので、すでにいくつかのコンポーネントがあることに注意してください。このメソッドをトリガーするページングコンポーネントやカスタムコンポーネントなど。私の観点から正しい方法は何ですか?
load
がトリガーされるたびに、邪魔にならない方法で追加のパラメーターをアタッチします。つまり、トリガーに変更を加える必要はなく(ここでトリガーはstore.load()
を実行する任意のコンポーネントである可能性があります)、ストアはこの新しいパラメーターを認識しません。
これは、プロキシにデータを要求する前に行われる操作であることがわかります。私の場合は、beforeload
イベントのリスナーとして実装しました。 beforeload
が実行されると、新しいパラメーターをリスナーの操作パラメーターに集約するだけで、 documentation はbeforeload( store, operation, eOpts )
になります。最終的な実装は次のようなものです。
store.on({
beforeload: function (store, operation, opts) {
Ext.apply(operation, {
params: {
filterName: Ext.getCmp('filterCombo').getValue()
}
});
}
});