2

フォームとグリッドがあります。ユーザーはフォームフィールドにデータを入力してから、関連するレコードをグリッドに表示する必要があります。検索フォームを実装したいと思います。たとえば、ユーザーが学生の名前と性別を入力すると、同じ名前と性別のすべての学生のグリッドが表示されます。

そこで、ajaxを使用してフォームフィールドの値をPHPに送信してから、グリッドストアで使用されるjson_encodeを作成します。

私の考えが良いかどうかは本当にわかりません。しかし、私はそれを行う別の方法を見つけていません。

問題は、ストアでautoLoadをtrueに設定すると、グリッドに、ユーザーが要求したものだけでなく、すべてのデータが自動的に入力されることです。

したがって、autoLoadをfalseに設定する必要があることは理解していますが、結果はファイアバグで正常に返されてもグリッドに表示されません。

どうしたらいいのかわからない。

私の見解

{
    xtype: 'panel',
    layout: "fit",
    id: 'searchResult',
    flex: 7,
    title: '<div style="text-align:center;"/>SearchResultGrid</div>',
    items: [{
        xtype: 'gridpanel',
        store: 'advSearchStore',
        id: 'AdvSearch-grid',

        columns: [{
                xtype: 'gridcolumn',
                dataIndex: 'name',
                align: 'right',
                text: 'name'
            },
            {
                xtype: 'gridcolumn',
                dataIndex: 'gender',
                align: 'right',
                text: 'gender'
            }
        ],
        viewConfig: {
            id: 'Arr',
            emptyText: 'noResult'
        },
        requires: ['MyApp.PrintSave_toolbar'],
        dockedItems: [{
            xtype: 'PrintSave_tb',
            dock: 'bottom',

        }]
    }]
},

私の店とモデル

Ext.define('AdvSearchPost', {
    extend: 'Ext.data.Model',

    proxy: {
        type: 'ajax',
        url: 'AdvSearch.php',
        reader: {
            type: 'json',
            root: 'Arr',

            totalProperty: 'totalCount'
        }
    },

    fields: [{
        name: 'name'
    }, {
        name: 'type_and_cargo'
    }]
});


Ext.create('Ext.data.Store', {
    pageSize: 10,
    autoLoad: false,
    model: 'AdvSearchPost',
    storeId: 'AdvSearchPost'
});

私のコントローラー

xmlhttp.open("GET", "AdvSearch.php?search_name=" + search_name, true);
xmlhttp.send(null);

私のPHPスクリプト

 if (!$con) {
     throw new Exception("Error in connection to DB");
 }

 $query = "SELECT name, gender FROM students  WHERE name ILIKE '%$search_name%' ";
 $result = pg_query($query);
 while ($row = pg_fetch_array($result)) {
     $Arr[] = array('name' => $row[0], 'gender' => $row[1]);
 }
 $searchResult_list = array();
 $searchResult_list['success'] = true;
 $searchResult_list['Arr'] = $Arr;

 $searchResult_list['totalCount'] = count($searchResult_list['Arr']);

 echo json_encode($searchResult_list);


 if (!$result)
     die("Error in query: ".pg_last_error());



 pg_close($con);
4

2 に答える 2

1

私があなたをフォローできるかどうかはよくわかりません...どのようにフィルタリングしますか?地元のページストアではどうですか?

remoteFilter: true店頭での使用をお勧めします。サーバーサイドで少なくとも1つのフィルターパラメーターを適用できるようになりました。そうしないと、空の結果セットが返されます。

サーバーに送信されるフィルタープロパティは次のようになります。

Filters:[{property:"FieldName", value: "anyValue"}] // objectview
于 2012-11-28T11:02:40.997 に答える
-2

わかりました...私は助けることができると思いますが、それはあなたが今していることとは少し異なる考え方を必要とします。

ストアを作成するときに、AJAX呼び出しを行うために使用できるプロキシをストアに指定しました。定義されたURLへのajax呼び出しを追跡しませんでした。したがって、ストアを定義してIDを指定すると、ストアマネージャー内にそのストアのインスタンスが登録されました。次に、そのストアのプロキシを使用して、コントローラーのようにデータをストアにロードする必要があります。

コントローラ:

//Get a reference to the store that the view references
var store = Ext.data.StoreManager.lookup('advSearchStore');

//Load data into the store using it's configured proxy
store.load({
    params: {
        search_name: search_name
    }
});

すべてがプロキシで正しく設定され(見栄えが良い)、サーバーがリクエストを取得して正しく応答すると仮定すると、設定したプロキシは、Webサービスが返すJSONデータをデコードし、javascriptオブジェクトにデコードし、取得する必要があります。 Arrプロパティを指定し、各アイテムを定義済みモデルのインスタンスに変換します。その後、これらがグリッドに自動的に追加され、意図した結果が得られるはずです。

于 2012-11-28T20:02:32.510 に答える