1

WYSIWYGエディター(TinyMCE)の周りに単純なラッパーがあります。JSNIを使用して、JavascriptからJavaインスタンスメソッド(onClick)を呼び出しています。ただし、Java onClickメソッドは、それを作成したエディターに関係なく、常に同じJavaインスタンス(最後に作成されたインスタンス)で呼び出されます。

        private SimplePanel panel;
        private TextArea ta;
        private String id;

        public TinyMCE(AbstractTinyMCEConfiguration config) {       
            id = HTMLPanel.createUniqueId();
            ta = new TextArea();
            ta.getElement().setId(id);
                panel = new SimplePanel();
            panel.add(ta);
            initWidget(panel);
            init(config);
        }

        protected native void init(AbstractTinyMCEConfiguration conf) /*-{
            var ins = this;
            $wnd.tinyMCE.init({
                    // General options
                    mode : conf.@com.chip.tinymce.client.AbstractTinyMCEConfiguration::getMode()(),
                    setup : function(ed) {
                        ed.onClick.add(function(ed,e) { 
                            alert(ed.id);
                            ins.@com.chip.tinymce.client.TinyMCE::onClick(Lcom/google/gwt/dom/client/NativeEvent;)(e);
                        }); 
                    }
                }); 
        }-*/;

        private void onClick(NativeEvent e) {
            GWT.log("onClick " + id);
            ClickEvent.fireNativeEvent(e, this);
        }

別の関数内にあるJavascript関数からJavaメソッドを呼び出すことができるかどうかはわかりません。多分それは私の問題を説明しています...または多分私は何かが欠けています。ご協力いただきありがとうございます。

4

1 に答える 1

3

TinyMCEにはすべてのエディターに対して1つの共有構成があると思いますが、それがここでの問題です。

構成が共有されている場合、コンストラクターに構成を渡すことはおそらくあまり意味がありません...

IDをJavaインスタンスにマップする静的マップを追加してみませんか。

    // ....
    private static Map<String, TinyMCE> idMap = new HashMap<String, TinyMCE>();

    public TinyMCE() {       
        // ...
        idMap.put(id, this);
    }

    // call this from Javascript with (ed.id, e)
    private static void onClick(String id, NativeEvent e) {
      idMap.get(id).onClick(e);
    }
于 2012-10-15T23:26:16.803 に答える