如何从extjs中的store.filter访问返回值?

如何从extjs中的store.filter访问返回值?,extjs,extjs4,extjs-stores,Extjs,Extjs4,Extjs Stores,我有以下代码,其中我创建了一个存储,并通过传递name\u holder值在加载时查询它。因此,基本上问题是 /query/name:name_holder* 其中,用户输入名称\u持有者值。现在,我试图检索返回的记录值,但无法在store.load函数之外访问它。 我的方法正确吗?我是ext.js的新手,任何帮助都将不胜感激。多谢各位 var store = Ext.create("Ext.data.Store", { fields: [

我有以下代码,其中我创建了一个存储,并通过传递name\u holder值在加载时查询它。因此,基本上问题是

 /query/name:name_holder* 
其中,用户输入名称\u持有者值。现在,我试图检索返回的记录值,但无法在store.load函数之外访问它。 我的方法正确吗?我是ext.js的新手,任何帮助都将不胜感激。多谢各位

var store = Ext.create("Ext.data.Store", {
                    fields: [
                             {name: 'name', type: 'string'},
                             {name: 'id',  type: 'string'},

                         ],
                    proxy : name_proxy,
                });

var data_names= store.load({
                    params : {
                        query : name_holder
                    },
   callback: function(records, operation, success) {
                            if (success) {
                                var data_id=  records[0].data.id;
                             } else {
                                console.log('error');
                            }
                        }
                });
    console.log(data_id);

我可以访问函数内部的数据_id值,但不能访问函数外部的数据_id值。因此,console.log行给了我一个错误

如果实际任务是找出
id
记录的
name
与给定字符串完全匹配,那么您就不需要对存储进行所有的麻烦。只需让服务器端API返回ID以响应查询,如
/query/name:name\u holder
。只需实现一个AJAX请求来获取ID

如果出于某种原因您需要坚持使用存储,那么最好还是让服务器端执行精确匹配,以便在请求
/query/name:name\u holder
时只返回一条记录。在这种情况下,您的存储在加载时只有一条记录,您可以通过以下方式轻松找到它的
id
store.getAt(0.getId()

最后,如果您不能或不想接触服务器端的任何内容,请使用该方法筛选出您感兴趣的记录:

store.query(
         'name',
         name_holder,
         false, // not anymatch
         true, // case sensitive
         true // exact match
     ).getAt(0).getId();

本地数据示例:

该函数的目的是检查记录是否与筛选条件匹配。筛选完成后,存储区将只有与筛选条件匹配的内容。使用
query:name\u holder
加载存储区将已返回仅与筛选条件匹配的记录,那么为什么要过滤呢?@Evantimboli有办法访问匹配的数据吗?@DrakeES它基本上是返回包含字符串的所有记录。我只想将其筛选到与\u holder完全相同的记录。@pal为什么要在服务器和客户机之间分割筛选作业,让它们每个只做一半?你不能让服务器只根据需要返回完全匹配的结果吗?谢谢你的建议。我尝试了你建议的代码。。我一直得到一个错误
存储。查询
不是一个函数。发布一个fiddle。
Ext.data.Store
上的
query
方法从1.1.0.Im版本开始使用,使用版本4.0.7发布小提琴或至少发布完整的代码。
query
方法肯定存在于
Ext.data.Store
中,因此您的问题可能是范围错误或类似的问题。现在您的问题与ExtJS无关。这些都是JavaScript的基础知识。在nutshell中,您不会“在函数调用之外检索它”。相反,您可以让函数执行您需要的操作,因为它是异步请求的回调。此外,将调用
store.load
的结果分配给
var data\u name
也没有意义,因为结果就是存储本身!我建议你先读一读。