如何从控制器动态设置总记录

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。

以上是关于如何从控制器动态设置总记录的主要内容,如果未能解决你的问题,请参考以下文章

laravel 模型 - 如何在模型中动态设置列值?

如何设置动态填充的下拉列表的值?

在这种情况下,如何从 API 调用中控制台记录数据? [复制]

用于显示麦克风记录输入的均衡器控制

运行 UI 自动化测试时如何忽略/停止推送器从日志记录到控制台

thinkPHP学习记录4