Когда у меня есть объект JSON, например:
{
"asset": {
"properties": [{
"name": "xxx",
"id": "yy"
}]
}
}
Затем у меня есть оболочки JsInterop, например:
@JsType
public class Asset {
@JsProperty
public native jsinterop.base.JsArrayLike<Property> getProperties();
}
а также:
@JsType
public class Property {
@JsProperty
public native String getName();
@JsProperty
public native String getId();
}
Когда где-то в коде я пытаюсь получить доступ к данным, происходит сбой, когда я пытаюсь получить доступ к атрибутам объекта Property.
Например:
Asset asset = dataProvider.getAssets();
console.log(assets) //works ok: => {"properties":Array(1)}
console.log(asset.getProperties()) //works ok: => Array(1)
console.log(asset.getProperties().getAt(0)) //works ok: => {"name":"xxx","id":"yy"}
console.log(asset.getProperties().getAt(0).getName() //does not work: => Uncaught exception: undefined
ИЛИ, если я создам класс активов и свойств (isNative=true):
Uncaught exception: Cannot read property "company" of undefined.
Я проверил, и если я компилирую приложение, когда пытаюсь получить имя или идентификатор, код компилируется в:
castTo(asset.properties[0], 125)
ИЛИ если (isNative=true):
castToNative(asset.properties[0], $wnd.com.company.project.Property)
Сначала я подумал, что это из-за моей реализации оболочки для массива, но я обнаружил «jsinterop.base.JsArrayLike», поэтому я подумал, что это решит мою проблему, но ошибка осталась прежней. Я что-то упустил? Я бы очень хотел использовать JsInterop вместо методов JSNI и типов Overlay, но я не могу пройти мимо этих массивов.