Wt WTableView 默认为分页而不是虚拟滚动
Wt WTableView defaulting to pagination rather than virtual scroll
(Cross posted here - with code sample)
我已经在我的项目中实现了 WTableView
,但它默认使用分页按钮而不是使用虚拟滚动(并且以一种非常丑陋的方式实现。)即使我几乎完全准确地实现了示例如示例图库所示,它仍然这样做。
我正在设置一个独立示例,但基本上我有以下容器层次结构:
WApplication -> WTemplate -> WTabWidget -> ReportTab
ReportTab 是我想要包含 table 的小部件。我尝试将其设为 WContainerWidget
和 WTemplate
,这没有任何区别。
直接使用 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
声明是:
class 报表模型: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 日
我做了一个测试用例来说明这个问题,我在其中删除了 bootstrap,所有的容器(所以现在我有 WApplication
-> WContainer
-> WTableView
), 但问题依然存在。
问题是我启用了 progressive-bootstrap
,这与 WTableView
执行虚拟滚动的能力不兼容。 (好吧,真正的问题是这在任何地方都没有记录......)
(Cross posted here - with code sample)
我已经在我的项目中实现了 WTableView
,但它默认使用分页按钮而不是使用虚拟滚动(并且以一种非常丑陋的方式实现。)即使我几乎完全准确地实现了示例如示例图库所示,它仍然这样做。
我正在设置一个独立示例,但基本上我有以下容器层次结构:
WApplication -> WTemplate -> WTabWidget -> ReportTab
ReportTab 是我想要包含 table 的小部件。我尝试将其设为 WContainerWidget
和 WTemplate
,这没有任何区别。
直接使用 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
声明是: class 报表模型: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 日
我做了一个测试用例来说明这个问题,我在其中删除了 bootstrap,所有的容器(所以现在我有 WApplication
-> WContainer
-> WTableView
), 但问题依然存在。
问题是我启用了 progressive-bootstrap
,这与 WTableView
执行虚拟滚动的能力不兼容。 (好吧,真正的问题是这在任何地方都没有记录......)