1

現在、ページの読み込みが非常に遅いです。基本的に、私が持っているコンボボックスを事前に設定したいと思います。現在、それぞれを個別に事前入力してから、デフォルト値を選択します。これはとても遅いです。ユーザーは、ページが完全に読み込まれるまで約 1 分待つ必要があります。

サーバーから値を取得して、コンボ ボックスに入力します。コンボ ボックスの値を事前に選択するための値は、応答変数を介して配列で受信されます。このプロセス全体をスピードアップするにはどうすればよいですか?

コードは以下のとおりです。

EXTJS

                    xtype: "combo",
                    width: 250,
                    id: "nameId",
                    name: "comboName",
                    labelStyle: 'width:100px',
                    fieldLabel:"Name",
                    allowBlank: true,
                    displayField: "nameDisplay",
                    valueField: "nameValue",
                    url: "/thelink/toGetAllComboboxValues/fromPHPFile/",



return {
    init: function (args) {

        formPanel.on({

            beforerender: function () {

                Ext.Ajax.request({
                    url: 'url/to/another/PHP/file/',
                    scope: this,
                    method: 'GET',
                    params: {
                        code_id: 'myUser',
                        number: '12345'
                    },

                    success: function (response, opts) {
                        var result = Ext.decode(response.responseText);
              Ext.getCmp('nameId').setValue(result.Name);

                    },

                });


            },

            scope: this
        });

      //add form panel here
    },

    getFormPanel: function () {

        return formPanel;
    },



    // load parameter values into the form
    loadParams: function () {

    },
    goHome: function () {

    },


};
}();

コンボ ボックスの値を取得するための PHP

//makes call to server for each individual combo box values

事前に選択された値を取得するための PHP

//grabs all pre-selected values based on an ID and puts them in an array
4

2 に答える 2

4

各ストアのレコード数が約 300 未満であり、ページにそれほど多くのストアがない場合は、php からすべてを一度に返す (または、ページの読み込みですべてのストアをロードすることがより望ましい) 必要があります。自体ですが、それはできないようです)。したがって、コンボボックスで選択した項目の値を取得する 1 つの ajax 呼び出しの代わりに、次のように考えてください。

各店舗のモデルを定義しました。

Ext.define("MyModel1", {
    extend: "Ext.data.Model",
    fields: [
        {name:"field_code", type:"string"},
        {name:"field_value",      type:"string"}
    ]
});

次に、各ストアを非常に簡単な方法で定義します。おそらく現在含めているリーダーとプロキシを省略していることに注意してください。パフォーマンスを向上させるために、Ext.data.ArrayStore を使用してください。名前付きの属性があります (これにより、サーバーから返されるテキストが減少し、フロントエンドでの解析時間も短縮されます):

var myStore = Ext.create("Ext.data.ArrayStore", {
    model: "MyModel1",
    data:  []
});

すでに定義した ajax リクエストで、返された json オブジェクトの属性としてストアのすべてのデータを php からの応答に追加し、それらを配列配列として実行して、要素の順序が Ext.data の定義方法と一致するようにします。モデル。この例の戻りオブジェクトは次のようになります (データは配列配列です)。

{
    my_combobox_value1: "CAD",
    my_combobox_data1: [
        ["CAD","Somthing for display of this record"],
        ["AN","Another Entry]
    ]
}

次に、ajax リクエストを次のように変更します。

Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});

これにより、状況に応じて最高のパフォーマンスが得られます。これが機能しない場合は、サーバー側ですべてを処理し、必要に応じてデータをロードするプロキシを備えたストアを使用する必要があります。

于 2012-06-22T18:51:57.700 に答える
0

まず、ユーザーが必要とするまで (値を変更するかトリガーをクリックするとき)、各コンボの完全な値リストを取得しないことをお勧めします。これを行うには、URL へのプロキシを使用してセットアップされたストアをコンボに提供します。

最初の単一値の表示を節約するために、1つのオプションは、文字列値とIDをレコードに保存することです(または、保存しないで、とにかくクライアントに送信します)。ただし、これはあまり良い方法ではありません。完全なリスト要求を取り除いた後は、ロード時間が十分に速くなる可能性があります。そうでない場合は、1 つの要求ですべての単一値の表示を要求できるかどうかを確認してください。

于 2012-06-22T17:02:10.670 に答える