【问题标题】:ExtJs : PageSizeExtJs:页面大小
【发布时间】:2015-12-12 23:37:13
【问题描述】:

您好,我正在尝试设置我的页面大小,但它无法正常工作:/ 我在第二页得到与第一页相同的结果。分页栏显示 1-25 个结果,但 27 个显示在第二页 26-27 但与第一页中的结果相同。我从 Sql select ... select * from example_table 获取数据我知道我可以限制 25 但这不是正确的解决方案,因为如果我这样做,我无法从 select 中获取全部数据,这种方式!为什么我不能正确显示?谢谢你!

Ext.define('Shopware.apps.UnSqlReader.controller.Main', {
extend: 'Ext.app.Controller',
init: function () {
var me = this;
me.mainWindow = me.getView('window.Window').create({}).show();

me.control({
    'main-window-view': {
    onSqlChange: me.onSqlChange
    }
})
},
onSqlChange: function (gridPanel, value) {
var me = this;
Ext.Ajax.request({
    url: '{url action=getColumns}',
    params: {
    fileName: value
    },
    success: function (response) {
    var responseObj = JSON.parse(response.responseText),
        grid = me.mainWindow.grid,
        pagingbar = me.mainWindow.pagingBar,
        columns = new Array(),
        gridColums = new Array();
    responseObj.columns.forEach(function (item) {
        columns.push({
        name: item,
        type: 'string',
        });
        gridColums.push({
        text: Ext.String.capitalize(item),
        dataIndex: item,
        renderer: function (val, meta) {
            meta.tdAttr = 'data-qtip="' + val.replace(/['"]+/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;') + '"';
            return val;
        }
        });
    });
    var SqlResult = Ext.create('Ext.data.Store', {
        fields: columns,
        remoteFilter: true,
        pageSize: 25,
        proxy: {
        type: 'ajax',
        url: '{url action=getSqlDetails}',
        reader: {
            type: 'json',
            root: 'data'
        }
        },
    });
    SqlResult.getProxy().extraParams.fileName = value;
    SqlResult.load();
    grid.reconfigure(SqlResult, gridColums);
    pagingbar.bindStore(SqlResult);
    grid.show();
    }
});
}

});

这里是完整的 php 函数

   public function getSqlDetailsAction() {
$fileName = $this->Request()->getParam('fileName');
$pluginFolder = dirname(dirname(__DIR__));
$sqlFolder = $pluginFolder . '/SqlFiles/';
$filePath = $sqlFolder . $fileName;
$sql = file_get_contents($filePath);
$sqlResultList = Shopware()->Db()->query($sql);
$columns = array();
for ($i = 0; $i < $sqlResultList->columnCount(); $i++) {
    $columns[$i] = $sqlResultList->getColumnMeta($i)["name"];
}
$this->View()->success = true;
$this->View()->columns = $columns;
$this->View()->data = $sqlResultList->fetchAll();
}

}`

如果有人可以帮助实现偏移量,那就太好了:data = $sqlResultList-&gt;

【问题讨论】:

    标签: sql extjs store paging


    【解决方案1】:

    不幸的是,这就是这样做的方式。 pageSize 参数只会在你发送请求时设置一个查询参数,以便服务器可以返回正确的数量:Combobox paging toolbar dosn't respond to page size

    有一个选项可以一次加载整个请求并在内存中进行分页 (https://docs.sencha.com/extjs/6.0/6.0.0-classic/#!/api/Ext.ux.data.PagingMemoryProxy)。但是,您只能对屏幕上的内容进行排序,我认为只能过滤屏幕上的内容。这里的例子:http://extjs.eu/example-grid-memory-paging/

    【讨论】:

    • :( 这让我很伤心 :( 但是为什么分页栏可以正确显示?而网格不行?
    • 分页栏刚从 0 开始,并在每次按下按钮时添加/减去 pageSize。我不知道内部原理,但我认为 Sencha 现在没有实现这个的主要原因是“如果你不实现服务器分页,你可能不需要客户端分页。”不过在这种情况下,删除分页工具栏可能会给您足够的空间来容纳最后两条记录!
    • php 偏移量怎么样,因为我从那里获取数据,但我的 php 技能太低,无法处理这个!这是我的 php 代码 sn-p $sqlResultList = Shopware()-&gt;Db()-&gt;query($sql);,我把它放在 extjs 的商店中。我用这个方法执行 $sql:如何将 sqlresult 偏移设置为 25 ..?你有什么想法吗。
    • 我对 php 不熟悉,但您只需要将“LIMIT x OFFSET y”附加到您的 sql 查询(“LIMIT 25”以限制为 25)。我相信 ExtJS 会为 pageSize 发送一个“limit”查询参数,并为记录索引发送一个“start”查询参数。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2013-07-16
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2015-02-28
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多