如何从控制器动态设置总记录
Posted
技术标签:
【中文标题】如何从控制器动态设置总记录【英文标题】:How to set total records dynamically from the controller 【发布时间】:2015-04-28 16:28:55 【问题描述】:问题来了,
服务器以 JSON 格式的多条记录进行响应,这些记录的数量大于 Store 中指定的网格 pageSize 参数。服务器未在此 JSON 中返回带有数据的总数。此类记录的数量是已知的,并且可能不同(应在另一个请求中从服务器请求此数量)。分页工具栏需要总数。
如何从视图控制器告诉代理阅读器这个数字?
我找到的唯一可行的解决方案是使用以下代码覆盖 Ext.data.reader.Json 阅读器:
Ext.define('MyApp.custom.AnotherReader',
extend: 'Ext.data.reader.Json',
alias : 'reader.anotherReader',
// разбираем ответ и записываем в store
getResponseData : function(response)
var st = Ext.decode(response.responseText);
st.total = 5;
//console.log(st);
return st;
);
问题是我无法从视图控制器动态更改此总参数。
JSON 1:
[
"id":"1",
"user_id":"11",
,
"id":"2",
"user_id":"12",
,
"id":"3",
"user_id":"13",
,
"id":"4",
"user_id":"14",
,
"id":"5",
"user_id":"15",
]
JSON 2:
"records_count": "5"
【问题讨论】:
您无法控制服务器响应? 您已经在getResponse
函数中保存了数组(或保存数组的 JSON)。为什么不st.total = the_array_for_your_store.length
?
我已经提到,行数大于存储中指定的网格pageSize参数。这就是为什么我在特定时刻只有部分记录在 Store 中,取决于限制和偏移量。
如果行数>pageSize,你想发生什么?是否仍要显示所有行?默认情况下会发生这种情况,因为 pageSize 除了您在请求中发送的参数之外不会影响任何内容。你想截断你的数组吗?然后使用array.splice
好的,这个链接会帮助你 - ***.com/questions/14254321/…
【参考方案1】:
您可以在控制器中执行此操作 -
// some event handler/ or normal function inside your Controller that you'll call
somFunction: function()
var me = this;
var store = Ext.getStore(<storeId>); // you can even pass the store
//instance as a parameter to this function
var reader = store.getProxy().getReader();
Ext.override(reader,
getResponseData : function(response)
var st = Ext.decode(response.responseText);
st.total = me.getValueYouWant();
return st;
);
【讨论】:
感谢您提供覆盖的想法!一件事是我需要覆盖 store.proxy.reader 而不是 store。以上是关于如何从控制器动态设置总记录的主要内容,如果未能解决你的问题,请参考以下文章
在这种情况下,如何从 API 调用中控制台记录数据? [复制]