Wt WTableView по умолчанию для разбивки на страницы, а не на виртуальную прокрутку

Вопрос:

(Крестик здесь — с образцом кода)

Я реализовал WTableView в своем проекте, но по умолчанию он использует кнопки с WTableView на страницы, а не использует виртуальный свиток (и делает это очень уродливо). Даже когда я реализовал пример почти так, как показано в галерее примеров, он все еще сделал это.

Я нахожусь в создании отдельного примера, но по существу у меня есть следующая иерархия контейнеров:

WApplication -> WTemplate -> WTabWidget -> ReportTab

ReportTab — виджет, который я хотел бы содержать таблицу. Я попытался сделать его 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);

Для ReportTab:

  • из-за тестирования, это по-прежнему полны магических чисел
  • Я попытался с и без реализации rowCount и columnCount

Объявление: class 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 {
// ...
}
}

ОБНОВЛЕНИЕ Апрель 16,2015

Я сделал тестовый пример, чтобы проиллюстрировать проблему, в ней я удалил bootstrap, все контейнеры (теперь у меня есть WApplicationWContainerWTableView), но проблема не WTableView.

Лучший ответ:

Проблема заключалась в том, что я включил progressive-bootstrap, что несовместимо с возможностью WTableView выполнять виртуальный свиток. (ну, реальная проблема в том, что это нигде не зарегистрировано…)

Оцените статью
TechArks.Ru
Добавить комментарий