0

http クライアントの get コールバックから root() にウィジェットを追加しようとしています。メニュー項目をクリックすると、get リクエストが送信され、レスポンスに基づいてウィジェットが追加されます。

私のクリックハンドラー:

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());
}

初めてメニュー項目をクリックすると、コンソールにログ メッセージが表示されますが、ブラウザでは何も起こりません。もう一度クリックすると、「test0」テキストがブラウザに表示され、「test1」がコンソールに表示されます。3 回目は、「test1」がブラウザに表示され、「test2」がコンソールにnew Wt::WText("test", root());表示されます。クリック ハンドラに追加すると、クリック直後にテキストがブラウザに表示されます。どうすればそれを機能させることができますか?

4

1 に答える 1

1

Wt のサーバー プッシュ メカニズムを有効にします。WApplication の構築時に WApplication::enableUpdates() を呼び出し、クライアント側のイベントによってトリガーされなかったウィジェット ツリーへの各変更の後に WApplication::triggerUpdate() を呼び出します。たとえば、マウス クリックはクライアント側のイベントであり、クライアントで何らかのアクションが発生したため、handleHttpResponse コールバックは呼び出されません。

于 2014-05-12T15:05:33.257 に答える