2016-03-31 5 views
2

я в настоящее время обновление моего GWT проекта 2,7 к 2.8-beta1 и я пытаюсь реорганизовать плагин обертку Javascript из JSNI к JsInterop.Wrap простой плагин JavaScript с использованием JsInterop

Здесь обертке JSNI:

public class MyPlugin extends JavaScriptObject { 

    protected MyPlugin(){ 
    } 

    public static native MyPlugin init(MyPluginConfig config) /*-{ 
     return new $wnd.MyPlugin(config); 
    }-*/; 

    public final native void addItem(MyPluginItem item) /*-{ 
     this.addItem(item); 
    }-*/; 

    public final native void setEnable(int itemIndex, boolean enable) /*-{ 
     this.setEnable(itemIndex, enable); 
    }-*/; 
} 

Что я пробовал:

@JsType(namespace = JsPackage.GLOBAL, isNative = true) 
public class MyPlugin { 
    public static native MyPlugin init(MyPluginConfig config); 
    public native void addItem(MyPluginItem item); 
    public native void setEnable(int itemIndex, boolean enable); 
} 

Проблема, я понятия не имею, как обернуть конструктор. В JsInterop doc

Уроженец класса @JsType может иметь только Общественные нативные методы, Общественные и неинициализированным поля, Пустой конструктор, Заключительных неместных методы, которые не отменяют любые другие методы,

Итак, это мой вопрос: Как обернуть плагин JavaScript, где в JS конструктор выглядит var myPlugin = MyPlugin({option1 : value1, option2 : value2,...}); в JsInterop?

Спасибо за помощь :)

ответ

3

Ok, я нашел решение.

Просто объявить конструктор с Params и пустым содержимым:

@JsType(namespace = JsPackage.GLOBAL, isNative = true) 
public class MyPlugin { 
    public MyPlugin(MyPluginConfig config) {} //<--- here 
    public native void addItem(MyPluginItem item); 
    public native void setEnable(int itemIndex, boolean enable); 
} 

И это работает.

Надеется, что это поможет другим людям :)

EDIT: MyPluginConfig структура

MyPluginConfig просто класс POJO.

@JsType(namespace = JsPackage.GLOBAL, isNative = true, name = "Object") 
public class MyPluginConfig { 
    @JsProperty public void setXXXX(String str); 
    @JsProperty public String getXXXX(); 
    ... 
} 
+0

Вы можете поделиться своей структурой кода MyPluginConfig? Я пытаюсь передать параметры моей обертке, но ее нарушение. – xybrek

+0

Привет, вы можете поделиться? – xybrek

+0

@xybrek. должен работать: ' @JsType (isNative = true, namespace = JsPackage.GLOBAL) public class MyPluginConfig { public String option1; public int option2; } ' ' MyPluginConfig config = new MyPluginConfig(); config.option1 = "некоторая строка опции"; config.option2 = 101; MyPlugin plugin = new MyPlugin (config); ' – user3233853

Смежные вопросы