【问题标题】:How to access the return value from a store.filter in extjs?如何从 extjs 中的 store.filter 访问返回值?
【发布时间】:2015-06-24 23:36:31
【问题描述】:

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

【问题讨论】:

  • 该函数的作用是检查记录是否符合过滤条件。过滤器完成后,商店将只有与过滤器匹配的东西。
  • 使用query: name_holder 加载存储已经只返回匹配过滤条件的记录,那么为什么要过滤呢?
  • @EvanTrimboli 有没有办法访问匹配的数据?
  • @DrakeES 它基本上是返回包含字符串的每条记录。我想将其过滤为仅具有完全 name_holder 的记录。
  • @pal 为什么要在服务器和客户端之间拆分过滤工作,让他们每个人只做一半?您不能只根据需要让服务器返回完全匹配吗?

标签: extjs extjs4 extjs-stores


【解决方案1】:

如果实际任务是找出name 与给定字符串完全匹配的记录的id,那么您就不需要对商店大惊小怪了。只需让您的服务器端 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

【讨论】:

  • 感谢您的建议。我尝试了您建议的代码。我不断收到错误store.query is not a function。
  • 发布小提琴。 Ext.data.Store 上的 query 方法自 1.1.0 起可用。
  • 我使用的是 4.0.7 版
  • 发布一个小提琴或至少您的完整代码。 query 方法肯定存在于 Ext.data.Store 中,所以你的问题可能是错误的范围或类似的东西。
  • 现在你的问题与 ExtJS 无关。这都是 JavaScript 基础知识。简而言之,您不会“在函数调用之外检索它”。相反,你让函数做你需要的,因为它是一个异步请求的回调。此外,将调用store.load 的结果分配给var data_names 是没有意义的,因为结果是商店本身!我建议你先阅读doc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2020-05-26
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多