2012-11-27 110 views
2

我有窗體和網格。用戶必須在表單域中輸入數據,然後在網格中顯示相關記錄。網格商店配置拋出「未捕獲TypeError:無法讀取屬性」緩衝「的未定義」

我想實現一個搜索表單,例如:用戶將輸入學生的姓名和性別,然後將獲得一個網格,所有學生都有相同的名稱和性別。

因此,我使用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' 
}); 

回答

7

那麼它僅僅是一個你STORENAME的錯字。

錯誤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來自世界各地接收存儲(在創建之後)。這也將使最後的聲明能夠在沒有任何控制者的情況下工作。

+0

非常感謝!錯誤消失了,但仍然沒有在網格中顯示,即使它在螢火蟲中成功返回。你有什麼建議? – Shadin

+0

@Oxi不客氣:)如果沒有來自服務器的JSON響應,這很難分辨出來。但我想這取決於返回的JSON和閱讀器配置。你必須檢查你的JSON是否被加密並且你的閱讀器已被正確配置(全部屬性,根屬性,id屬性等等) – sra

+0

好的,我會檢查它。很多謝謝:) – Shadin

1

即使你這樣打電話.. store: Ext.StoreMgr.lookup('bla bla bla')不會在控制檯中拋出任何錯誤。

更換參數與STOREID,然後分配您的實際店面它,這將連接到您的實際店面。storeId:advSearchPost

相關問題