Sencha Touch:プロキシのURL変更後にNestedListとTreeStoreを再ロードする

TreeStoreでNestedListを使うアプリケーションとアプリケーションがあります。 TreeStoreは、AJAX型のプロキシとXMLリーダーを使用しています。今、データソースとして使用されているURLを変更できる設定ページを実装しました。その変更後にアプリケーションを「リロード」する必要があります。その結果、私はプロキシのURLを変更します:

App.tree_store.proxy.url = new_url;

それから私は新しいデータをロードしたい:

App.tree_store.load();

NestedListをルートカードに切り替えると、以前の設定と現在の設定の混合データが格納されます:

App.views.hdTreeView.setActiveItem(0);

質問:全く新しいデータ(同じデータモデル)をロードする前にNestedListを "クリア/リセット"するにはどうすればよいですか? TreeStore/SubStoresとProxyもクリアする必要がありますか?おそらくdestroy()メソッドを使用して新しいコンポーネントを再作成しますか?

removeAll()を使用してリストをすべて削除し、ストアをリロードすると、新しいリストは作成されません。

ありがとう!

0
新しいデータをロードした後、このコレクションに残っているアイテムが1つだけである限り、 onBackTap()を呼び出します。 App.views.hdTreeView.items
追加された 著者 Maciej Zabielski,

2 答え

 showDetail: function(list, index , element , record) {
            //Take your store
            var store = Ext.getStore('yourstore');

            //Apply the params
            Ext.apply(store.getProxy()._extraParams, {
                id : record.data.id
            });

            //Reload your store
            store.load();
}

このコードをコントローラに置く

新しいデータを取得するために extraParams を変更するだけです。

店舗で exterparam を入力しないでください。

だからあなたはただ1つのURLを使用しますが、データを取得するためにちょうどparamをチャネリングします。

1
追加された

まず、 store.setProxy()を使用して新しいプロキシオブジェクトを渡し、次にこれを使用します。

nestedListObject.bindStore(store.load());

nestedListObject はネストされたリストです。

0
追加された
問題はネストされたリストがそれ自体を再ペイントしないということです。したがって、ストア内の要素や要素が変更されていなくても、実際のHTMLは更新されません。私はちょっとあなたのループをルートリストなどと混同しています。私はあなたがそれでやりたいことを理解できませんが、とにかく古いリストを破棄し、更新されたストアで新しいリストを作成するのが最善だと思います。
追加された 著者 ilija139,
なぜあなたはそれを再現できませんでしたか?私はそれを編集することができますので、jsfiddleにいくつかのコードを提供できますか? ST1.1またはST2を使用していますか?
追加された 著者 ilija139,
STはバグのフレームワークではありません!あなたはちょうどそれを正しく使用していません...
追加された 著者 ilija139,
申し訳ありませんが、NestedListにはbindStore()メソッドがありません。それとも私は何かを誤解しましたか?
追加された 著者 Maciej Zabielski,
実際に新しいプロキシオブジェクトを作成すると、URLを変更すると違うのですか?とにかく、ループを使ってルートリストに戻ります。(HdMobile.views.hdTreeView.items.length> 1){App.views.hdTreeView.onBackTap();}
追加された 著者 Maciej Zabielski,
私が理解する限り、TreeStoreは実際に古いデータをプロキシではないので、一種の "flush"メソッドを使うことができますし、 "clearOnLoad"で扱うこともできますか?既存のアイテムをすべて削除するか、サブツリーのみを削除しますか?
追加された 著者 Maciej Zabielski,
ちょうど明確にする:bindStore()メソッドはNestedListではなくExt.Listでのみ利用可能です。残念ながら、新しいストアと新しいプロキシを作成してLoad()を使用しても、NestedListはリロードされません。 NestedListはLoadイベントを発生させません(これは確認済みのバグだと思います...)
追加された 著者 Maciej Zabielski,
はい、ストアの負荷の後にリストを再作成することができませんでした。私のために働いたのは、URLを変更して、既存のストアとプロキシのロードを呼び出すことでした(同じ結果であなたが提案したプロキシを置き換えることもできます)。リストに深く入り込み、新しいデータでリロードストアを変更しようとすると、2つの問題が発生します.1つはデバッガの下に表示される古いリストのコレクション、もう1つは古いリストの1つにリンクされた戻るボタンです。私のループは古いリストを削除し、ルートリストに移動します。 removeAllメソッドを試しましたが、リストを破棄しています
追加された 著者 Maciej Zabielski,
それはST1.1です、私はおそらくバグのフレームワークが楽しいものではないので、ST2にアップデートするか、ネイティブになるでしょう。パフォーマンスも問題であるようです。あなたは "ネストされたリストは自分自身を再ペイントしないという問題があると思います - それは私の問題ですが、componentDoLayout()を使うことは役に立ちません。
追加された 著者 Maciej Zabielski,
バグではない?なぜなら、1)Xml属性の読み取り - 未知のエラー:SYNTAX_ERR、2)リストが表示されるまでプログラムリスト選択の変更が失敗する、3)TreeStoreでdefaultRootIdパラメータが受け入れられない、4)データストアgetByIdが正しく機能しないちょうど少数の名前を挙げる。 (Sencha Devのコメントの1つだけ:「この機能にバグがあるようですが、niktwのパッチは、新しいリリースを出すまであなたのためにこの問題に対処する必要があります」
追加された 著者 Maciej Zabielski,