2

フォームとグリッドがあります。ユーザーはフォーム フィールドにデータを入力し、関連するレコードをグリッドに表示する必要があります。

検索フォームを実装したいと思います。たとえば、ユーザーが学生の名前と性別を入力すると、同じ名前と性別を持つすべての学生のグリッドが表示されます。

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

自分の考えが正しいかどうかは正直わかりません。しかし、私はそれを行う別の方法を見つけていません。

問題は、私のストアに間違いがあることですが、それが何であるかを理解できませんでした。次のエラーが表示されます。 Uncaught TypeError: Cannot read property 'buffered' of undefined

私の見解:

{
  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',
    }]
  }]
}

私のコントローラー:

.
.
.
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);

私の店、モデル:

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'
    }
  ]
});
advSearchStore = Ext.create('Ext.data.Store', {
  pageSize: 10,
  model: 'AdvSearchPost'
});
4

2 に答える 2

8

まあ、それはあなたの店名のタイプミスです。

このエラーUncaught TypeError: Cannot read property 'buffered' of undefinedは、ストアをバインドできなかったことを示しているだけです。少し誤解を招くかもしれません。

どちらかでグリッドを試してください

store: advSearchPost

また

store: Ext.StoreMgr.lookup('AdvSearchPost') // if in any form a controller takes care about your store 

そしてそれはうまくいくでしょう。

編集

コントローラーを持っていないと思うので、このようにストアを作成することをお勧めします

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

これにより、StoreManagerどこからでもストアを受け取ることができます (作成後)。これにより、最後のステートメントがコントローラーなしで機能するようになります。

于 2012-11-27T09:55:43.000 に答える