如何从控制器动态设置总记录
How to set total records dynamically from the controller
问题来了,
服务器响应 JSON 中的几条记录,这些记录大于商店中指定的网格 pageSize 参数。在此 JSON 中,服务器未返回带有数据的总数。此类记录的数量是已知的并且可能不同(该数量应在另一个请求中从服务器请求)。分页工具栏需要总数。
如何从视图控制器告诉代理 reader 这个数字?
我找到的唯一可行的解决方案是使用以下代码覆盖 Ext.data.reader.Json reader:
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;
}
});
问题是我无法从 viewcontroller.
中动态更改此总参数
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"
}
您可以在控制器中执行此操作 -
// 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;
}
});
}
问题来了,
服务器响应 JSON 中的几条记录,这些记录大于商店中指定的网格 pageSize 参数。在此 JSON 中,服务器未返回带有数据的总数。此类记录的数量是已知的并且可能不同(该数量应在另一个请求中从服务器请求)。分页工具栏需要总数。
如何从视图控制器告诉代理 reader 这个数字?
我找到的唯一可行的解决方案是使用以下代码覆盖 Ext.data.reader.Json reader:
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;
}
});
问题是我无法从 viewcontroller.
中动态更改此总参数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"
}
您可以在控制器中执行此操作 -
// 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;
}
});
}