从http响应回调中添加新的小部件

时间:2014-05-06 16:16:25

标签: c++ wt

我正在尝试从http客户端获取回调向root()添加一个小部件。当我点击菜单项时,我发送获取请求,然后根据响应添加一个小部件。

我的点击处理程序:

Wt::Http::Client *client = new Wt::Http::Client(Wt::WApplication::instance());
client->done().connect(boost::bind(&RequestBase::handleHttpResponse, this, _1, _2));
client->get("url...");

回调方法:

void RequestBase::handleHttpResponse(boost::system::error_code err, const Wt::Http::Message& response) {
    stringstream ss;
    ss << "test" << i++;
    new Wt::WText(ss.str(), root());
    Log(ss.str());
}

当我第一次点击menuitem时,我在控制台中看到了日志消息,但浏览器中没有任何反应。当我再次点击它时,浏览器中出现“test0”文本,控制台中出现“test1”。第三次,“test1”出现在浏览器中,“test2”出现在控制台等中。如果我将new Wt::WText("test", root());添加到单击处理程序,则文本会在单击后立即显示在浏览器中。我怎么能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

启用Wt的服务器推送机制。构造WApplication时调用WApplication :: enableUpdates(),然后在每次修改未被客户端事件触发的窗口小部件树后调用WApplication :: triggerUpdate()。例如,鼠标单击是客户端事件,由于客户端上的某些操作,未调用handleHttpResponse回调。