2016-12-02 6 views
0

編集可能にするには、smartGWT Windowsのタイトルが必要です。そして、ウィンドウの数が変わるので、動的に行う必要があります。GWTウィンドウのタイトルを編集可能にする

私は次のように進めた:

1)彼らは

private String randomId = "title" + Random.nextInt(); 

2にロードされたときに、私は、Windows用のランダムなIDのリストを作成します)私は、ウィンドウを作成するための方法を実装し、その設定タイトル

@Override 
public final Canvas getCanvas() { 
    if (window == null) { 
     window = new Window(); 
     window.setTitle(getTitle(model)); 

3)

private String getTitle(E model) { 
     return "<span contenteditable=\"true\" style=\"cursor: text\" id=\"" + randomId + "\">" + model.getName() + "</span>"; 
} 

3)私は、次のようにIメソッドを実装)は、それが

window.addDrawHandler(event -> setupTitleEditing(randomId)); 

4がクリックされた場合に、ウィンドウを編集するメソッドを呼び出す:

private native void setupTitleEditing(String name)/*-{ 
    document.getElementById(name).bind('click', function() { 
     $(this).attr('contentEditable', true); 
     }).blur(function() { 
     $(this).attr('contentEditable', false); 
     }); 
}-*/; 

要素スパンステップでヌルであると考えています4)正しいID(ブラウザインスペクタ)であっても。

私の質問です:GWTメソッドを使用してjavaでこれを行う方法はありますか?そうでなければ、何が間違っていたのですか?

答えて

1

私の提案する解決策にはまだ問題はありますが、あなたが何を間違えたのかを示してから、完全な解決策を見つけることができます。

JSNIメソッドsetupTitleEditing(String name)では、documentの代わりに$docを使用する必要があります。その理由は、(第11章からの引用、アクションはGWT、第2版)

GWTアプリケーションがあること(および通常である)可能性が 内枠の中にブラウザがロードされていること。つまり、document変数 の可視性が保証されます。 GWTは代わりに$doc JavaScript変数を提供します。これにより、アプリケーションがブラウザにどのようにロードされるかに関係なく、標準document変数にリンクすることが保証されます。

$doc.getElementById(name)によって返されるオブジェクトには、メソッド 'bind'または 'blur'がありません。この割り当てを行う必要があります

$doc.getElementById(name).onclick = function(){ 
    $(this).attr('contentEditable', true); 
}; 

このソリューションを実装して実行しました。私はタイトルを編集することができましたが、面倒なことはありませんでした。 <span>要素のカーソルは喜んで表示されません。私はカーソルを何度もクリックするだけでカーソルを表示させ、その後はタイトルを編集することができました。理由はわかりませんが、タイトルを右クリックしてコンテキストメニューを表示してから、inspect elementをクリックすると、常にカーソルが表示されます。

P.S.あなたの質問に記載されているウィジェットクラスCanvasWindowは、バニラGWTの代わりにSmartGWTに属しているため、あなたの投稿に'gwt'の代わりに'smartgwt'とタグ付けしました。私は正しい?誰かがあなたのタグを編集し、'smartgwt''gwt'に置き換えました。私はGWTのjavadocを調べ、そのWindowクラスにはaddDrawHandlerという名前のメソッドがなく、WindowクラスのメソッドもCanvasのサブクラスではないことが分かりました。

解決策はSmartGWTに固有のものではないかもしれませんが、私は、1)SmartGWTフレームワークに精通した人が出てきて助けになるようにタグを追加してください。 CanvasおよびWindow

+0

はい、コンテンツが編集可能になる前に、どこでもクリックする必要があります。誰でもこのバグを取り除く方法について考えていますか? –

関連する問題