2012-04-16 6 views
6

私はExtのMVCパターンが本当に新しいです。 私は同じコンポーネントの複数のインスタンス(それを製品と呼ぶ)を持つタブパネルを持っています。それぞれが開くときにidパラメータを使ってサーバーを呼び出す必要があります。ExtJS4 - パネルインスタンスごとに保存しますか?

は今のところ、これらのタブを作成するために - 私は、ビューの新しいインスタンスを作成し、製品のコントローラ でこれを使用しますが、それは本当に不正確だような気がします。

createMainView: function (opts) { 
    return Ext.widget("productDisplay", opts); 
} 

私はこのような私の「メイン」コントローラ、からそれを呼び出す:各1つの店舗と行動(のインスタンスを持つ、適切にビューの複数のインスタンスを使用する正しい方法は何

var tab = this.application.getController("Products") 
    .createMainView({ productId : id, closable: true }) 

tabs.add(tab); 
tabs.setActiveTab(tab); 

コントローラを介して)。

は、私が(アプリ/店舗/ product.js下のjsファイルで)彼らのために1つのという名前のストアを使用することはできますか?

loadをコントローラから(productIdを渡すために)ストアに手動で呼び出すか、より良い方法がありますか?

答えて

6

それは一種の(あなたが彼らのガイドとマニュアルにSencha.comにところで見つけることができます)大きく、完全な説明が必要で非常に広範かつ興味深い質問ですね。私は何かを始めるために何かを持っていることを強調するカップルポイントをご希望ですか:

  1. ストアは通常グローバルオブジェクトです。ある店舗の2つのインスタンスを一般的に保管しないでください。そのストアからの情報をいくつかの異なるビューで表示する必要がある場合は、フィルタリング(ローカルまたはリモート)を使用できます。ストアを複製する必要があるのは、そのストアの異なる情報を2つ以上の異なるビューに表示する場合だけです同時に

  2. コントローラは、通常、メインアプリケーションオブジェクトによって生成されます。特別なことを行う必要はありません。controllers: []のプロパティにリストするだけです。そして、アプリケーションが起動されると(ビューが作成されレンダリングされる前に)生成されます。心に留めておきます。

  3. あなたがモーダルビューを持っている場合 - それはそれを手動で作成するには大丈夫だし、それを再使用したり、破壊し、後で再作成のいずれか。これらのビューを作成するコントローラにフィルタリングと読み込みを追加することができます。必要に応じて、異なるタブに同じビュー/コントローラオブジェクトを再利用することもできます。

  4. あなたの意見は、オブジェクトのインスタンスを1つ提示している場合は、(のような一つの製品は、それぞれのタブに表示される) - これらのビューに店舗を添付しないでください。個々のモデル(レコード)を渡すだけです。

+0

お返事ありがとうございます。私は前にストアのフィルタリングの例を見たことがありますが、それは私のケースでは、同時に存在する複数のタブがあり、それぞれ異なるデータを表示しています(同じタイプの私は店舗の複製について尋ねました)、モーダルではありません(プロンプトのようなモーダルを意味するならば、同時に存在します)。 – Madd0g

+0

各ビューまたはモデル(レコード)にストア(基本的に配列)が必要ですか? – sha

+0

レコードが店舗外で使用できるかどうかはわかりませんでした。そのため、モデルがプロキシを持つことができます。 1つのレコードに読み込み/保存/バインド機能がありますか? – Madd0g

0

ビューのinitComponentメソッド内のそのビューインスタンスのみに関連するストアを作成することをお勧めします。

お使いのコントローラのcontrolハンドラは、彼らがイベントを送出したビュー区別できるような方法でコーディングする必要があります。ほとんどすべてのビューイベントには、イベントを発生させたコンポーネントへの参照が含まれているため、これはあまり難しいことではありません。必要に応じて、同じビュー内の別のコンポーネントのハンドルを取得するために、相対クエリセレクタ(myEventFiringComponent.up('anotherComponent')またはmyEventFiringComponent.down('anotherComponent')など)を使用できます。

詳しくは、this postを参照してください。

+0

Geronimoありがとうございました、まさに私がやったことです。 'initComponent'の下にストアを作成し、' this.control'の下のすべてが特定のビューを参照できることを確認します(そして、私は自分の 'fireEvent'をラップしようとします)。 – Madd0g

関連する問題