需要执行一个 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但它不显示项目列表。
最佳答案
要将列表转换为 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 列表一样使用它。有点矫枉过正,但它确实有效。
关于java - 使用 JSNI 将 List<String> 转换为 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803524/