2013-06-07 6 views
2

У меня есть собственный метод, который должен перебирать JSONObject. Есть ли способ достичь этого?Итерация над JSONObject в GWT JSNI

public native void foo(JSONObject c)/*-{ 
    var keys = [email protected]::keySet()(); 

    for (var k : keys){ 
     alert(k); // this does not fire up. no error in console :(
    } 
}-*/; 

Кроме того, есть ли способ преобразовать Java Map типа в JSONObject?

Любой намек был бы очень признателен! Благодаря! :)

ответ

3

JSONObject#keySet возвращает Set, который является объектом оберточной массив JS (в режиме прод, в DevMode это стандарт java.util.Set из вашей виртуальной машины Java

Таким образом, либо использовать простой Java:

Set<String> keys = c.keySet(); 
for (String key : keys) { 
    Window.alert(key); // or call a JSNI method here if you need? 
} 
.

или первый экстракт лежащий в основе JavaScriptObject, а затем вы можете использовать JS for…in:

var o = [email protected]::getJavaScriptObject()(); 
for (var k in o) { 
    if (o.hasOwnProperty(k)) { 
    alert(k); 
    } 
} 
+0

Просто то, что мне нужно! Благодаря! :) –

2

Вы пробовали что-то вроде:

for (var k in c) { 
    if (c.hasOwnProperty(k)) { 
    alert(k+":"+c[k]); 
    } 
} 

Я моя память не изменяет, я думаю, что этот код работает ...

О втором вопросе, если объект является Java- GWT действительный объект, вы можете использовать Autobeans для получения JsonObject.

+1

+1 для Autobeans :) Я думаю, что это должно сделать трюк –

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