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

时间:2015-06-23 21:08:44

标签: extjs extjs4 extjs-stores

我有以下代码,我通过传递name_holder值来创建商店并在加载时查询它。所以基本上查询将是

 /query/name:name_holder* 

用户输入name_holder值。现在我试图检索返回的记录值,但我无法在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);

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

1 个答案:

答案 0 :(得分:0)

如果实际任务是查找id与给定字符串完全匹配的记录的name,那么您不需要对商店大惊小怪。只需让服务器端API返回ID以响应/query/name:name_holder之类的查询。只需实现一个AJAX请求即可获取ID。

如果由于某种原因需要坚持使用商店,那么最好的方法是让服务器端执行完全匹配,以便在请求/query/name:name_holder时只返回一条记录。在这种情况下,您的商店在加载时只会有一条记录,您可以通过这种方式轻松找到idstore.getAt(0).getId()

最后,如果您不能或不想触摸服务器端的任何内容,请使用query方法过滤掉您感兴趣的记录:

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

本地数据示例:https://fiddle.sencha.com/#fiddle/pbo