使用JSNI </string>将List <string>转换为Javascript

时间:2013-07-23 07:06:19

标签: java gwt twitter-bootstrap jsni

需要做一个JSNI方法,它将在TextBox上提供一个项目列表,使用Twitter Bootstrap X-Editable作为ListBox“可编辑”:

public static native void makeEditableList(Element el /*, List<String> items*/)/*-{
    $wnd.items=[];
    $wnd.$.each({"BD": "Bangladesh", "BE": "Belgium", "BF": "Burkina Faso", "BG": "Bulgaria"}, 
        function(k, v) {
        $wnd.items.push({id: k, text: v});
    }); 
    $wnd.$(function(){      
            $wnd.$.fn.editable.defaults.mode = 'inline';
            $wnd.$(el).editable({
                inputclass: 'input-large',
                source: $wnd.items
            });
        }
    );          
}-*/;

问题是:

  • 需要将List转换为Javascript列表
  • 来源似乎无法从$wnd.items
  • 获取商品

这很好,当我运行应用程序时,GWT TextBox变为X-Editable,但它不显示项目列表。

2 个答案:

答案 0 :(得分:5)

要将您的列表转换为javascript列表,您可以使用以下代码:

private JavaScriptObject convertListToJsList(List<String> list){
    JavaScriptObject jsListObject = createJsListObject();
    for (String stringToAdd : list){
        addStringElement(jsListObject, stringToAdd);
    }
    return jsListObject; 
}


private native JavaScriptObject createJsListObject()/*-{
    return [];
}-*/;

private native void addStringElement(JavaScriptObject jsListObject, String stringToAdd)/*-{
    jsListObject.push(stringToAdd);
}-*/;

然后你可以把它传递给

public static native void makeEditableList(Element el /*, List<String> items*/, JavaScriptObject list)

并像javascript列表一样使用它。有点矫枉过正,但它确实有效。

答案 1 :(得分:3)

转换代码稍短:

private static JsArrayString createJsArrayString(List<String> list) {
    JsArrayString jsArray = (JsArrayString) JsArrayString.createArray();
    for (String string : list) {
        jsArray.push(string);
    }
    return jsArray;
}