Wt WTableView 默认为分页而不是虚拟滚动

Posted

技术标签:

【中文标题】Wt WTableView 默认为分页而不是虚拟滚动【英文标题】:Wt WTableView defaulting to pagination rather than virtual scroll 【发布时间】:2015-04-15 16:14:14 【问题描述】:

(Cross posted here - with code sample)

我已经在我的项目中实现了WTableView,但它默认使用分页按钮而不是使用虚拟滚动(并且以非常丑陋的方式进行。)即使我几乎完全按照示例库,它仍然这样做。

我正在设置一个独立的示例,但基本上我有以下容器层次结构:

WApplication -> WTemplate -> WTabWidget -> ReportTab

ReportTab 是我想要包含表格的小部件。我尝试将其设为WContainerWidgetWTemplate,这没有任何区别。

直接使用QueryModel<> 与我自己的扩展QueryModel(主要基于VirtualModel)的实现也没有真正的区别。

根据我的阅读,WTableView 应该只在浏览器不支持 JS 时实现分页。但我的问题出现在我尝试过的所有浏览器上。

代码示例:

auto table_view = new Wt::WTableView();
auto model = new ReportTableModel(10); // TODO change magic number

auto query = session_.query<Item>(
    "SELECT"
    "   TaskResult, "
    "   sp.stockpile_label, "
    "   event_created, "
    " FROM task_results TaskResult"
    "   INNER JOIN tasks t ON TaskResult.task_result_id = t.id"
    "   INNER JOIN stockpile_events sp ON t.id = sp.stockpile_event_id"
);
model->setQuery(query);
model->setBatchSize(10);

model->addColumn("sp.stockpile_label", tr("report-col-stockpile"));
model->addColumn("TaskResult.volume", tr("report-col-volume"));
model->addColumn("event_created", tr("report-col-created"));

table_view->setModel(model);
addWidget(table_view);

对于报告选项卡:

由于测试,这仍然充满了神奇的数字 我尝试过实现和不实现 rowCount 和 columnCount

声明是: 类 ReportTableModel : public Wt::Dbo::QueryModel

ReportTableModel::ReportTableModel(int rows, Wt::WObject *parent)
    : QueryModel(parent),
      rows_(rows),
      columns_(7) // TODO clean this magic number up
   

boost::any ReportTableModel::data(const Wt::WModelIndex& index, int role) const 
    if (index.column() < 5)
        return QueryModel::data(index, role);
    else 
        // ...
        return boost::any();
    

int ReportTableModel::rowCount(const Wt::WModelIndex& parent) const 
    if (!parent.isValid())
        return rows_;
    else
        return 0;

int ReportTableModel::columnCount(const Wt::WModelIndex& parent) const 
    if (!parent.isValid())
        return columns_;
    else
        return 0;

boost::any ReportTableModel::headerData(int section,
            Wt::Orientation orientation,
            int role) const

    if (section <= 5) 
        return QueryModel::headerData(section, orientation, role);
     else 
        // ...
    

2015 年 4 月 16 日更新

我做了一个测试用例来说明这个问题,在其中我删除了引导程序,所有容器(所以现在我有 WApplication -> WContainer -> WTableView),但问题仍然存在。

【问题讨论】:

【参考方案1】:

问题是我启用了progressive-bootstrap,这与WTableView 执行虚拟滚动的能力不兼容。 (嗯,真正的问题是这在任何地方都没有记录......)

【讨论】:

以上是关于Wt WTableView 默认为分页而不是虚拟滚动的主要内容,如果未能解决你的问题,请参考以下文章

WTableView 中的 QueryModel:请举例说明如何添加一行并用刚刚创建的新记录填充它

有没有更好的选择来应用分页而不在 SQL Server 中应用 OFFSET?

HTTP更改变量并重新加载Sinatra

使用PHP做分页查询(查询结果也显示为分页)

避免为分页页面缓存更新的策略

(HTML + CCS3 为分页媒体生成的内容)到 PDF? [关闭]