0

我有以下代码,我在其中创建一个商店并通过传递 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 行给了我一个错误。

4

1 回答 1

0

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

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

最后,如果你不能或不想在服务器端触摸任何东西,使用查询方法过滤掉你感兴趣的记录:

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

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

于 2015-06-24T11:37:00.707 回答