6

私はExtのMVCパターンに本当に慣れていません。同じコンポーネントの複数のインスタンスを含むタブパネルがあります (製品と呼びましょう)。それぞれが開かれたときに、id パラメーターを使用してサーバーを呼び出す必要があります。

現在、これらのタブを作成するために、ビューの新しいインスタンスを作成する製品コントローラーでこれを使用していますが、それは本当に間違っているように感じます。

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

次のように、「メイン」コントローラーから呼び出します。

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

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

ビューの複数のインスタンスを適切に使用する正しい方法は何ですか。それぞれが (コントローラーを介して) 1 つのストアと動作のインスタンスを持ちます。

それらに 1 つの名前付きストアを使用できますか (app/store/product.js の下の js ファイルを使用)?

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

4

2 に答える 2

6

これは非常に幅広く興味深い質問であり、大きくて完全な説明が必要です (Sencha.com のガイドとマニュアルで見つけることができます)。いくつかのポイントを強調したいと思います。

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

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

  3. モーダル ビューがある場合は、手動で作成して再利用するか、破棄して後で再作成してもかまいません。これらのビューを作成するコントローラにフィルタリングとロードを追加できます。また、必要に応じて、異なるタブに同じビュー/コントローラー オブジェクトを再利用できます。

  4. ビューがオブジェクトの 1 つのインスタンスを表示している場合 (各タブに 1 つの製品が表示されるなど)、それらのビューにストアを関連付けないでください。個々のモデル (レコード) を渡すだけです。

于 2012-04-16T14:58:47.470 に答える
0

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

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

完全な説明については、この投稿を参照してください。

于 2012-05-02T15:41:21.760 に答える