-1

ビューがビューポートに取り込まれたときに、ストアをロードして、取得したモデルをビュー内のフォームに設定できるようにしたいと思います。ただし、この目的でどのイベントを使用すべきかはよくわかりません。

これは、ビューの「Painted」イベント内で実行する必要がありますか、ビューはコントローラーに戻って起動し、コントローラーがビューにデータを入力する必要がありますか、それとも他の推奨される方法がありますか?

現在、私の見解ではこれがあります:

  listeners: {
        painted: function () {
            var contactStore = Ext.getStore("theContactDetailsStore");

             contactStore.load({
                    scope: this,
                    callback: function (record, operation, success) {
                        if (success && record[0]) {                            
                            this.setRecord(record[0]);                                     
                        }
                    }
                });
       }
   }
4

2 に答える 2

0

これを処理するには 2 つの方法があります。

  1. 最初にビューを作成し、その初期化関数でストアを作成してロードします。ローディングを作成するためのコードは、初期化から対応するイベントを発生させることにより、簡単にコントローラーの一部にすることができます。あなたのビューはデータなしでは見栄えが悪いかもしれないので、これは見苦しく見えるかもしれませんが、それでもこれはより速いので、ビューのマスキングとマスキング解除(ストアの読み込みコールバックで)に注意してください。

  2. 最初にストアを作成し、ロード コールバックで、そのデータを使用してビューを作成するデータ (ストア レコードなど) を使用してイベントを発生させます。ストアがロードされるまでビューのどの部分も表示されないため、最初は遅く見えます。

于 2012-12-30T04:47:13.317 に答える
0

ペイントされたイベントは、要素のサイズや位置の修正など、いくつかの低レベルの DOM 操作を実行するために使用する必要があります。

  • 最初にストアをロードし、最終的に「ロード中...」メッセージでビューポートをマスクします。これにより、操作に時間がかかる場合でも、ユーザーはアプリがクラッシュしたという印象を受けなくなります。
  • ストアの "load" コールバックで、必要なデータ モデルを "record" 構成パラメーターとして渡すフォーム ビューを表示します。

このようにして、レコード データが入力されたフォームがすぐに表示されます。

PS: ストアをロードする前にビューポートをマスクする場合は、フォームを表示する前に「ロード」コールバック内でマスクを解除することを忘れないでください。

于 2012-12-29T14:08:06.827 に答える