单击后但在重定向之前刷新/重置WPushButton的链接/ WResource

时间:2015-10-09 14:41:36

标签: wt

有没有办法在点击之后但在浏览器定向到链接或资源之前重置WPushButton的链接?

背景是我有一个WResource,它复制一个item / tablemodel(从WAbstractTableModel派生),冻结它的状态/数据并根据它进行csv文件转换。因此,当我单击“下载当前状态为csv”按钮时,我需要创建一个新的WResource并设置按钮链接到它,然后才能触发整个重定向机制。我怎样才能做到这一点?

修改:目前Wt似乎无法实现这一目标,请参阅my this post in the official Wt forum

1 个答案:

答案 0 :(得分:0)

您可以创建一个资源,在其创建时使用模型,然后在handleRequest方法中从中提取数据。

一个例子:

class TableResource : public WResource
{
public:
    TableResource(WStandardItemModel *model, WObject *parent) :
        WResource(parent),
        model(model)
    {

    }

    ~TableResource()
    {
        beingDeleted();
    }

    void handleRequest(const Http::Request &request, Http::Response &response)
    {
        std::string data;

        for (int i = 0; i < model->rowCount(); ++i)
        {
            std::string row;

            for (int j = 0; j < model->columnCount(); ++j)
            {
                row.append(model->item(i, j)->text().toUTF8());
                row.append(";");
            }

            data.append(row);
            data.append("\n");
        }

        response.setMimeType("text/plain");
        response.out() << data;
    }

private:
    WStandardItemModel *model;
};

用法:

WApplication* createApplication(const Wt::WEnvironment& env)
{
    WApplication *app = new WApplication(env);

    WStandardItemModel *model = new WStandardItemModel(app);
    for (int i = 0; i < 10; ++i)
    {
        std::vector<WStandardItem*> items;

        for (int j = 0; j < 4; ++j)
        {
            WStandardItem *item = new WStandardItem;
            item->setText(WString("item {1} {2}").arg(i).arg(j));
            items.push_back(item);
        }

        model->appendRow(items);
    }

    WTableView *table = new WTableView(app->root());
    table->setModel(model);

    WPushButton *btn = new WPushButton(app->root());
    btn->setText("export");
    btn->setResource(new TableResource(model, btn));

    return app;
}