Столкнулся с интересной проблемой при разработке веб-проекта на Dart и JavaScript. Пытаюсь вызвать методы класса Dart из JavaScript кода.
Все работает отлично при использовании webdev serve
, но после сборки проекта через webdev build
возникает ошибка:
Uncaught TypeError: qs.display is not a function
Я использую аннотацию @JS для объявления функции getClassHandle, которая возвращает экземпляр класса QCmds. Затем из JavaScript пытаюсь вызвать методы этого класса.
Кто-нибудь сталкивался с подобной проблемой? Есть ли какие-то особенности работы Dart и JS при сборке проекта?
Сейчас как временное решение создаю отдельные @JS функции для каждого метода класса, но хотелось бы найти более элегантный способ.
Буду благодарен за любые идеи!
сталкивался с похожей штукой, оказалось дело в минификации при сборке. попробуй добавить @annotation.Keep к методам, которые вызываешь из js. это должно предотвратить их оптимизацию. ещё можно поиграться с настройками compiler_options в build.yaml, чтобы отключить агрессивную оптимизацию. а вообще согласен, что лучше сделать прослойку между dart и js, типа фасада. так будет проще дебажить такие проблемы. удачи с проектом!
Да, такая проблема встречается при сборке. Возможно, дело в минификации кода. Попробуй добавить @JSExport к методам класса QCmds, которые хочешь вызывать из JS. Еще вариант - использовать js_util.callMethod вместо прямого вызова. А вообще, лучше всего обернуть взаимодействие Dart-JS в отдельный слой абстракции, чтобы избежать подобных сюрпризов в будущем. Как думаешь, что из этого может сработать?