【问题标题】:ExtJS 4.2 Accessing Array Elements returned from storeExtJS 4.2 访问从存储返回的数组元素
【发布时间】:2014-01-03 11:00:07
【问题描述】:

我无法访问从我的商店返回的商店元素。当我 console.log(me.proxy.read(operation)) 并在控制台中展开/导航时,我看到了我的所有元素。有 1000 行。我对网格使用相同的存储并将 pageSize 设置为 50。即使我在执行 console.log(me.proxy.read(operation.resultSet.records[51])) 时可以看到 1000 行,但我得到了未定义的消息。因此,由于某种原因,我可以访问的元素数量似乎只有 50 个,因为这是我的 pageSize 设置的值。

长话短说,我在两个场景中使用同一个商店。我想在我的网格中进行分页,每页显示 50 行。但是,我想遍历整个商店并加载所有 1000 行的数组。我想要一个所有 1000 个数组的原因是因为我将使用行中的日期字段从数组中填充我的日期选择器。我将禁用网格中的日期,并让日期选择器仅显示网格中的日期。

我试图包含一个屏幕截图,但我不被允许,因为我在信誉系统上只有 3 级。

var operation = new Ext.data.Operation({action: 'read', start: 0, limit: 1000});
var proxy = new Ext.data.proxy.Ajax({ url: 'http://192.168.0.103/testit/dao_2.cfc?method=getContent'});
me.proxy.read(operation);
console.log(me.proxy.read(operation));

这里是更新的代码:

I have this in my controller:                                              

ondatesStoreLoad: function(me,records,success)
{
var s = this.getStore('dates');
    for (i = 0; i < s.getCount(); i++) {     
        MESSAGE_ID = s.getAt(i).get('message_id');
        RECIP_EMAIL = s.getAt(i).get('recip_email');
        UNIX_TIME_STAMP = s.getAt(i).get('unix_time_stamp')
        console.log(i,MESSAGE_ID, RECIP_EMAIL, UNIX_TIME_STAMP);
    };}

这会将我的所有 1,000 条记录输出到控制台,但我不确定如何将它们放入可以在我的 datepicker 组件中使用的数组中。每当我尝试在日期选择器中获取商店时,它总是未定义。我想这是因为商店还没有加载所以那里什么都没有。不知道如何解决这个问题。也许是回调处理程序?

这里是另一个更新:

我在 store.load 中添加了一个回调:

var store = Ext.getStore('dates');

store.load({callback: function(){
    console.log(store.data.items[999].data.recip_email);
    console.log(store.data.items[999].data.unix_time_stamp);}
})

这需要很长时间才能弄清楚,但现在我可以访问我的所有记录并且有一个较小的问题需要解决。目前我只有一个硬编码的元素来进行快速测试。

我需要将代码放在哪里才能将其放入我的日期选择器 disableDates 配置中?我需要将日期放入一个数组中,但为了快速测试,我使用了 minDate: 只是为了看看我是否可以看到一些工作,但它显示为未定义。现在我有一个beforrender监听器中的代码,但似乎需要在其他地方或者我的日期选择器的某个处理程序......?日期选择器是否有 onload 或我应该为此使用的东西??

【问题讨论】:

  • 据我所知,当使用分页网格时,只加载当前显示的记录集。所以在你的情况下,一次只有 50 个。您可以执行一个不使用您的商店的单独服务器调用来检索 1000 条记录以更新日期选择器。
  • 另外,为什么要手动创建操作?如果您创建一个带有代理的商店,您只需在商店上调用.load() 来加载数据。无需进行明确的.proxy.read() 调用。
  • ** 免责声明:我正在为这个框架工作而苦苦挣扎。虽然我有一个网格设置可以从我的服务器和其他一些基本的东西中提取,但它一直很痛苦。长话短说,我不知道自己在做什么。有了这个,我刚刚找到了一些代码片段来尝试访问商店,并且在能够看到所有 1,000 条记录方面取得了一些成功,所以我一直尝试使用它来让某些东西正常工作。我的意图是在再次访问服务器之前尝试从商店获取我能得到的所有东西。我不应该这么担心吗?
  • 如果您还没有,我建议充分利用 ExtJS 文档。 docs.sencha.com/extjs/4.2.2/#!/api/Ext.data.StoreStore 的链接。此外,他们在这里有大量的工作示例:docs.sencha.com/extjs/4.2.2/#!/example 这些示例附带您可以查看的代码,因此您可以看到他们做了什么。
  • 感谢您愿意提供帮助,但就像我在此论坛上看到的其他所有人一样,我对文档的看法似乎与其他所有人共享。没有一个示例可以应用于他们作为示例给出的 MVC 模式。我无法进行跳跃。很穷。

标签: arrays store extjs4.2


【解决方案1】:

为什么不直接从 ondatesStoreLoad 函数更改日期选择器?在循环之前,禁用日期选择器中的所有日期。然后在循环期间,而不是 console.log 调用,启用在该记录中找到的日期。

理论上,这应该可行。但是,查看 Ext 的文档,我看不到禁用所有日期或启用日期的方法。您只能设置禁用哪些日期。但是在ondatesStoreLoad 调用中更新日期选择器的总体思路仍然是您应该做的。

您可能需要扩展 datepicker 类,并向其添加一些自定义方法以启用特定日期。

【讨论】:

  • 我想我已经弄清楚了日期部分。由于禁用日期是使用正则表达式评估的,所以我需要做的就是反转它,然后它给出不在我列表中的日期。我在一个硬编码的数组上试过了,它奏效了。您评论的另一部分听起来像是赢家。我要试一试,然后发回我发现的东西。非常感谢
  • 好的,很酷,然后将所有日期填充到一个数组中,而不是调用console.log,然后使用该数组代替硬编码的数组。
  • 是的,我在这个网站的某个地方找到了禁用日期解决方案。不记得在哪里,但是如果您搜索它,我认为它会出现在顶部附近
  • 我尝试在处理函数 ondatesStoreLoad 中设置我的变量,但它显示未定义。我可以设置变量的唯一位置是在我添加商店侦听器的 init:function() 中。如果我在那里设置全局变量,我可以用它设置我的 datepicker minDate。否则没有这样的运气。知道自己在做什么的人在哪里设置这个?我用谷歌搜索,但我没有看到有关如何在 EXT MVC 中设置变量的确切示例。真的很困惑,因为对我来说似乎很简单的事情是什么,所以我错过了基础 - 很明显。
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
相关资源
最近更新 更多