0

ExtJS 4 でモデル/ストア/プロキシ/リーダーを適切に使用する方法について混乱しています。ガイドを読み、例を見ましたが、まだ問題の解決策がわかりません。

目標:オブジェクト (モデルが存在する) を操作しているとしcarます。これには (とりわけ) 以下が含まれます。

  • 車の識別子 (VIN#、メーカー、モデル、年式、色など)
  • 所有履歴
  • メンテナンス履歴
  • 車のコンポーネントの詳細なリスト (エンジン: {L ツイン シリンダー、シリンダーあたり 2 バルブ デスモドロミック、空冷}、フロント ブレーキ: {}、...)

そして、VIN# を主キーとして使用していて、次のような RESTfull API セットアップがあるとします。

GET /car                 // gets list of cars
GET /car/123abc          // gets car with VIN# 123abc

ここで、コントローラーに VIN# への参照がある場合、次のようなコンポーネントを含む複雑なダッシュボードを起動します。

  • 車のコンポーネントのグリッド
  • メンテナンス費用と時間のグラフ
  • メーカー、モデル、年を表示するためのカスタム パネル
  • ect

問題:サーバーがネストされたデータを送信するように構成されて いるCarモデルがあるとします (つまり、 を直接処理するための API はありません)。理想的には...単純な方法でサーバーから車のデータを要求し、返されたデータを使用して複雑なダッシュボードのすべてのコンポーネントを設定したいだけです。したがって、私の試みの戦略は次のとおりです。CarComponentCarComponentGET /car/<the vin #>

  • モデル: CarCarComponent
  • 店舗:Cars
  • プロキシ:Carモデルにアタッチされた単一のレスト プロキシ
  • 何らかの方法で a のネストされたプロパティを使用Carしてコンポーネントを埋めます (例: コンポーネントのグリッド)

または、コンポーネント用に別のストアが必要ですか? また、ストアがどのように機能するかわかりません。サーバーからすべての車をロードするのではなく、指定された車だけをロードします。モデル/プロキシ/ストアをつなぎ合わせて必要なことを達成する方法について混乱しています...

4

1 に答える 1

1

このような状況では、車用に別のグリッドがあり、コンポーネント用に別のグリッドがある場合、理想的なセットアップは、CarComponent も処理するための API を持つことです。これは事実ではないとおっしゃっていたので、2 つの別々のストアを定義することをお勧めします。データをロードするために同じ GET リクエストを発行しますが、別のルート リーダーを指定します。サーバーが次のようなデータを返す場合:

{
    Car:
    {
        color:blue,
        CarComponent:
        {
            engine: {..}
        }
        ..
    }
}

次に、1 つのストア (CarStore と呼びましょう) にはリーダー ルートがCarあり、もう 1つのストア (CarComponentStore と呼びましょう) がありCar.CarComponentます。このアプローチの欠点は、返されるデータが同じであっても、Car と CarComponent の 2 つのリクエストを毎回発行する必要があることです。ただし、これは「マスター」ストアと「スレーブ」ストアの概念を使用することで回避できます。それを説明するこの優れた回答を参照してください。

Car グリッドでは、ストアを CarStore に設定し、CarComponent では CarComponentStore に設定する必要があります。リーダー ルートを正しく定義することで、両方のグリッドに応答からの適切なデータが「自動的に」取り込まれます。

サーバーからすべての車をロードしたくありません..

まあ、VIN# の手がかりがない限り、そうする必要はありません。ほとんどの AP はページネーションをサポートしているため、たとえば、車を 10 つずつ取得したり、リモート フィルタリングを含めてサーバー側でレコードをフィルタリングしたりできます。しかし、最初の前提条件は、取得したい車を知ることです:-)

于 2013-09-14T14:20:42.367 に答える