网格存储配置抛出“未捕获的类型错误:无法读取未定义的属性‘缓冲’”

Posted

技术标签:

【中文标题】网格存储配置抛出“未捕获的类型错误:无法读取未定义的属性‘缓冲’”【英文标题】:Grid store config throws "Uncaught TypeError: Cannot read property 'buffered' of undefined" 【发布时间】:2012-11-14 21:48:06 【问题描述】:

我有表格和网格。用户必须在表单字段中输入数据,然后在网格中显示相关记录。

我想实现一个搜索表单,例如:用户将输入学生的姓名和性别, 然后会得到一个包含所有同名同性别的学生的网格。

所以,我使用 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'
);

【问题讨论】:

【参考方案1】:

这只是您商店名称的拼写错误。

错误Uncaught TypeError: Cannot read property 'buffered' of undefinedonly表示无法绑定store。这可能有点误导。

尝试使用任一网格

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 从任何地方接收商店(在创建之后)。这也将使最后一条语句在没有任何控制器的情况下工作。

【讨论】:

非常感谢!错误消失了,但结果仍然没有显示在网格中,即使它在萤火虫中成功返回。你有什么建议? @Oxi 不客气 :) 如果没有来自服务器的 JSON 响应,这很难说。但我想这取决于返回的 JSON 和阅读器配置。您必须检查您的 JSON 是否有效并且您的阅读器是否配置正确(总属性、根属性、id 属性等) 谢谢哥们,我遇到了同样的问题,你的建议解决了。【参考方案2】:

即使你这样打电话.. store: Ext.StoreMgr.lookup('bla bla bla') 不会在控制台中抛出任何错误。

storeId 替换 store 参数,然后将您的实际商店分配给它将连接到您的实际商店。 storeId:advSearchPost

【讨论】:

以上是关于网格存储配置抛出“未捕获的类型错误:无法读取未定义的属性‘缓冲’”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义抛出的属性“coSearchCriteria” - Angular Karma/Jasmine

未捕获的类型错误:无法读取未定义的属性“存储”[重复]

jsonp 请求中的“未捕获的类型错误:无法读取未定义的属性‘toLowerCase’”

如何在应用程序加载期间捕获“未捕获的类型错误:无法读取未定义的属性‘isModel’?

未捕获的类型错误:无法读取未定义的属性“长度”

Sencha-Touch:未捕获的类型错误:无法读取未定义的属性“代理”