1

プレイグラウンドで次のコードを実行すると:

var button1 = new qx.ui.form.Button("First Button", "icon/22/apps/internet-web-browser.png");
var doc = this.getRoot();
doc.add(button1, { left : 100, top  : 50 });
button1.addListener("execute", function(e) { alert("Hello World!"); });
button1.setToolTipText(new qx.ui.core.Command("Control+D").toString());
qx.locale.Manager.getInstance().setLocale("en");

ボタン ツールチップには Ctrl+D が表示されます。

ロケールを「de」に変更しても、ツールチップには引き続き Ctrl+D が表示されます。2 回目の実行では、正しい文字列である Strg+D が表示されます。

最初の実行で正しい文字列を表示するにはどうすればよいですか?

私の問題を示すさらに良い例は次のとおりです。

var doc = this.getRoot();
var button1 = new qx.ui.form.Button("Deutsch", "icon/22/apps/internet-web-browser.png");
doc.add(button1, { left : 100, top  : 50 });
button1.addListener("execute", function(e) { qx.locale.Manager.getInstance().setLocale("de"); });
button1.setToolTipText(new qx.ui.core.Command("Control+D").toString());

var button2 = new qx.ui.form.Button("English", "icon/22/apps/internet-web-browser.png");
doc.add(button2, { left : 200, top  : 50 });
button2.addListener("execute", function(e) { qx.locale.Manager.getInstance().setLocale("en"); });
button2.setToolTipText(new qx.ui.core.Command("Control+E").toString());

ツールチップを見てください。

これはバグですか、それともロケールを正しく設定していませんか?

/敬具

キリスト教徒

4

1 に答える 1

1

両方のスニペットの問題は、評価と順序の問題です。1 つにはqx.ui.core.Command("Control+D").toString()、現在のロケールを指定してプレーン文字列を返すだけです。その後、値は「固定」され、自動的に変更されなくなります。最初のスニペットでは、最初にツールチップを設定してから、ロケールを変更します。つまり、「en」に切り替える前に有効なロケールに応じてツールチップが設定されます。その後、スニペットを再実行すると (Playground を使用していると思われます)、ツールチップの設定が新しいロケールで実行され、ツールチップに英語版が表示されます。

2 番目のスニペットでは、「execute」リスナーでロケールを変更しても、ツールチップには影響しません。その値は、コードが評価される時点で有効だったロケールを使用してすでに「ハードワイヤード」されているためです (次のいずれかの場合ではありません)。ボタンが押された!)。もちろん、ボタンの 1 つを押して Playground でコードを再実行すると、新しいロケールが取得され、ツールチップに表示されます。

これを回避する 1 つの方法は、「execute」リスナーにツールチップを設定することです。この遊び場の例を参照してください。 (あまり賢明ではありませんが、これから作業できると思います)。

于 2011-01-07T18:21:10.860 に答える