ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?
Posted
技术标签:
【中文标题】ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?【英文标题】:ExtJS 4 - How to load grid store with its params carrying latest values from a form? 【发布时间】:2011-11-25 05:42:38 【问题描述】:我有一个窗口,顶部是搜索表单,底部是网格。
用户可以在搜索表单中输入值并单击按钮 - 获取记录。
单击此按钮时,我通过以下方式将表单字段中的值作为参数传递来加载网格的存储:
store.load(
params:
key1:Ext.getCmp('field1').getValue();
);
我尝试在存储代理本身中提供参数,但不幸的是它总是占用初始值(呈现表单时的值),而不是用户在表单字段中输入的最新值。以下是我在创建商店时为参数赋值的方法:
extraParams:
key1:Ext.getCmp('field1').getValue();
我想在两件事上寻求指导:
一个。在定义商店时,是否可以确保商店在查询服务器之前从表单字段中获取最新/当前值,以便在调用加载函数时不必提供这些值?
这变得更加必要,因为我在底部有一个分页工具栏,它带有一个刷新按钮(以及用于导航的下一个、最后一个、上一个、第一个图标)。
现在,每当用户点击刷新(或任何导航图标)时,商店都会在没有查询参数的情况下加载。
因此第二件事是:
b.如果“a”的答案是——在调用加载函数时手动将最新值传递给参数——那么我该如何编写“刷新”按钮和导航图标(即下一个、最后一个、上一个和第一个)的处理程序分页工具栏,以便我可以将最新的表单值传递给加载函数。
提前感谢您的帮助。
PS:我使用的是 ExtJS 4。
【问题讨论】:
我已经能够通过使用 store 的 'beforeload' 事件解决第一个问题。现在我在 beforeload 事件中将参数传递给代理 extraparams 并且它们采用最新值。但是如果有人可以指导他们,肯定想知道分页工具栏按钮的处理程序。再次感谢。 我在 v4,对不起,我也应该在问题正文中提到它,以及问题的标题。 您不需要对分页工具栏进行任何特殊处理。因为用户在分页工具栏上生成的事件反过来会导致商店的'beforeload'被触发,你已经介绍过。 NetEmp 你应该在一个简短的答案中写下你的解决方案并标记它以便关闭这个问题。 @amol: beforeload 确实会处理每个商店的加载,但一般来说,如果我们要为分页工具栏图标编写一个处理程序,那该怎么做呢?有什么线索吗? 【参考方案1】:yourStore.on('beforeload',function(store, operation,eOpts)
operation.params=
status:cmbStatus.getValue(),
value:txtBuscarPor.getValue(),
empresa:'saasd',
app:'dsads'
;
,this);
【讨论】:
+1。这比我尝试的解决方案(v4+ 的新版本)要好得多。【参考方案2】:一个可能的解决方案是使用存储的“beforeload”事件并在其中提供参数列表。这样,无论何时加载 store,都会触发其 beforeload 事件,并且获取的值始终是最新的。希望这对寻找类似东西的人有所帮助。
【讨论】:
【参考方案3】:与您的问题 (b) 相关(并且因为您在 cmets 部分特别要求这样做):
我只看到一种标准的方法来挂钩 PagingToolbar 按钮处理程序,这是非常有限的。
Ext.toolbar.Paging
在实际更改当前页面之前触发 'beforechange' 事件。见API docs。返回false
的侦听器将停止页面更改。
所有其他方法都需要扩展 Ext 类,如果 ComboBox 可以更轻松地使用您自己的 BoundList
实现(这是呈现下拉列表的类)或通过配置参数传递给 @ 987654325@分别。分页工具栏。
我曾试图在 Ext 留言板上指出这种缺乏灵活性的问题,但几乎被忽略了。
【讨论】:
感谢您分享错误信息。我尝试在 store 的 beforeload 事件中以某种方式处理这个问题,因为即使点击了分页工具栏上的图标,它也会被调用。但是是的,你说的没错,就是缺乏灵活性。以上是关于ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?的主要内容,如果未能解决你的问题,请参考以下文章
面板折叠 ExtJS 上的 HTMLEditor 文本区域丢失数据