Я desesperatly пытаюсь создать объект Anno в методе JSNI, но у меня есть странная проблема: код в jsni-методе не работает, но если я делаю то же самое в моей консоли браузера, он отлично работает.GWT-JSNI, передающий JavaScriptObject во внешней библиотеке JS
Java Часть
Я использую в Wich с JSONArray
добавить некоторые JSONObject
(со всеми элементами, в соответствии с Anno документ). Вот мой метод JSNI:
// I'm using the getJavaScriptObject() on my JSONArray
private static native void launch(JavaScriptObject steps)/*-{
var anno = new $wnd.Anno(steps);
anno.chainIndex().show();
}-*/;
Browser Часть
Просто чтобы быть ясно, метод вызывается на onShow
событие, поэтому все Ressources загружаются и отображаются. Поэтому, когда элемент отображается и вызываемая функция, у меня есть эта ошибка в моей консоли:
Не удалось найти Anno.target 'h1'. --- anno.js: 265
NB: В Anno.js h1 является значением dafault цели.
Но мои шаги значение правильно и когда я делаю те же команды в консоли работает:
var testAnno = new Anno([{
content: "namespinnerFrequencyA",
position: "center-right",
target: ".dataAuto0"
},{
content: "chooseFrequencyB",
position: "top",
target: ".dataAuto1"}]);
testAnno.show();
Я не понимаю, почему это работает в одном случае, а не в другом. Я также пытался использовать JSON.stringify
, затем JSON.parse
, но он тоже не работает.
EDIT:
я понял что-то. При отладке anno.js я понял что: когда я инициализируюсь Anno в консоли, локальная область выглядеть следующим образом (увеличения изображения here):
Но когда я использую метод JSNI, локальная область является совершенно разные, мой параметр сохраняется в качестве фактического массива вместо того, чтобы быть обработан нормально (Увеличенное изображение here):
Обходной путь работает отлично! Я думал, есть ли более красивый способ сделать это? Например, загрузите библиотеку anno в iframe GWT? Я также попытаюсь использовать ваше первое предложение, оно всегда может быть полезно – Carvallegro