如何使您的 GWT 应用程序可插入?

2024-05-06

我正在(与我的团队)编写一个 GWT 应用程序,它解析并表示一些特定于领域的语言 - 例如,使用文本、视频和 UI 控件播放媒体演示。所以应用程序有一组组件:一个 - 用于保存模型,一个 - 用于控制例程(控制器),当然我们还有视图类。

现在我们遇到了一个问题 - 使其全部可插入,即:

  • 应该是一个core插件,它可以制作所有常见的东西。这个 coer 块必须是一个 JavaScript 文件(每个排列一个)

  • 应该有能力extend核心类,编写自定义类 - 并将其编译为单独的 JS 文件(每种排列一个)

每个插件都必须将自身注册(导出其类等)到核心平台,以便可以使用。

问题:

  1. How to compile定制的东西 分别地 ?
  2. How to load插件?

For the second one problem我找到了http://code.google.com/p/gwt-exporter/ http://code.google.com/p/gwt-exporter/,它将 GWT 类导出到外部世界,因此可以从纯 JS 调用它们。

我也有一个想法要创造新模块对于新插件,因此它将被编译为单独的文件(第一个问题).

您有构建此类架构的经验吗?在这种情况下您有一些最佳实践吗?


自 GWT 1.5 以来,我一直在尝试解决同样的问题,每次我想出更优雅的解决方案时,他们都会更改链接器并破坏它。我想出的独立于链接器设计的唯一方法是完全按照您所说的进行操作,并为所有插件创建一个新模块。然后使用 GWT 导出器创建一个插件必须扩展的抽象类,该类具有一个抽象方法,该方法将采用核心传递给它的插件的根元素并填充它。此方法的问题是,所有插件模块都必须在页面初始加载时添加到 DOM,因为从 2.0 开始,iFrame 链接器依赖于页面加载事件,因此动态添加的模块将无法完全加载。因此,您需要将导出的填充方法封装在 runAsync 中,以便在使用模块之前不会下载它们。

Edit:

这是我正在谈论的内容的一个粗略示例。请注意,我已经有几年没有做过任何 GWT 了,现在可能有更好的方法来做到这一点。

public final class PluginManager
{
    public static final PluginManager INSTANCE = new PluginManager();

    private PluginManager()
    {
    }

    private static native void loadPlugin( AbstractPlugin plugin )
    /*-{
        if (!$wnd.Plugins) {
            $wnd.Plugins = {};
        }
        var name = [email protected] /cdn-cgi/l/email-protection::getName()();
        $wnd.Plugins[name] = $entry([email protected] /cdn-cgi/l/email-protection::load(Ljava/lang/String;));
    }-*/;

    private static native void unloadPlugin( AbstractPlugin plugin )
    /*-{
        if ($wnd.Plugins) {
            var name = [email protected] /cdn-cgi/l/email-protection::getName()();
            delete $wnd.Plugins[name];
        }
    }-*/;

    private static native JsArrayString getPlugins()
    /*-{
        if ($wnd.Plugins) {
            return Object.keys($wnd.Plugins);
        }
        return undefined;
    }-*/;

    public static abstract class AbstractPlugin implements EntryPoint
    {
        @Override
        public final void onModuleLoad()
        {
            PluginManager.INSTANCE.loadPlugin( this );
        }

        protected final void unload()
        {
            PluginManager.INSTANCE.unloadPlugin( this );
        }

        protected abstract String getName();

        protected abstract void load( String rootPanelId );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使您的 GWT 应用程序可插入? 的相关文章

  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 插件架构中的反射与属性

    我正在开发一个在启动时从子目录加载插件的应用程序 目前我正在通过使用反射来迭代每个程序集的类型并查找实现 IPluginModule 接口的公共类来实现此目的 由于反射涉及性能影响 并且我预计一段时间后会有多个插件 我想知道定义在程序集级别
  • Facebook 页面插件无法运行 - 仅适用于一个网站

    我已将页面插件集成到我的目录中 ruhrlink de info php schluessel 150991 不起作用 其他的可以 当我在开发者网站 gt 页面插件中手动输入网址时 它在那里也不起作用 https www facebook
  • 带有 wsdl2java 插件的 gradle

    我正在使用 no nils wsdl2java 插件 完整的 gradle build 文件如下所示 plugins id org springframework boot version 2 3 4 RELEASE id io sprin
  • gwt 谷歌应用引擎 HTTP 错误 404

    我在 Eclipse 中使用 google 应用程序引擎创建了一个新的 gwt 项目 但是当我运行该项目时 在浏览器中我收到以下消息 HTTP 错误 404 访问 Test html 时出现问题 原因 NOT FOUND 由码头提供动力 现
  • Pytest 插件:覆盖 pytest_runtest_call 和朋友

    我正在为我的一个项目使用 pytest 开发一个测试套件 由于项目的性质 我需要创建一个 Pytest 插件来控制测试的运行方式 它们不是在本地运行 而是发送到不同的进程来运行 我知道关于xdist但我认为这并不能解决我的问题 我一直在通过
  • 是否有一个“AcceptsOneWidget”也“ProvidesResze”(除了“ScrollPanel”)?

    我有一个复合材料可以扩展ResizeComposite并有一个DockLayoutPanel作为它的根 我可以直接贴进去RootLayoutPanel它之所以有效是因为DockLayoutPanel ProvidesResize 但是 我想
  • 想要在 GWT 单元列表中实现“标记为已读”功能

    我想实施这个单元格列表的例子 http gwt googleusercontent com samples Showcase Showcase html CwCellList经过一处修改 我想在有人点击后将每一行设置为灰色 它应该保留在那里
  • 奇怪的行为 CRM 2011 插件

    我已经为我们的报价产品注册了一个插件 该插件在我们的测试环境中运行良好 我已经测试过很多次了 然后在主服务器中注册插件 但是 会出现以下情况 当我首先创建或更新报价产品时 报价产品表单会变灰 单击报价单后 出现错误 没有可用的日志文件 如您
  • XcodeColors 在 XCode 5 中不起作用

    我尝试安装XcodeColors在 XCode 5 中 但不幸的是 它不能与我从 XCode 4 6 获得的旧插件一起使用 下一步 我检查了 github 网站 在那里我看到了以下拉取请求 提供了 XCode 5 的工作版本 https g
  • GWT/JAVA 未捕获的异常转义

    我的代码有问题 但似乎无法修复它 我想在提交按钮时将一些客户数据添加到 java GWT 中的数组列表中 我从中添加数据的表单 ok addClickHandler new ClickHandler public void onClick
  • 在 GWT 中使用 SVG

    我想知道是否可以在面板中包含 SVG 内容 或者在 GWT 中工作的任何内容 能够以编程方式向 SVG 添加更多内容 例如添加圆或曲线 并处理鼠标事件 这会是在 SVG 或 GWT 中 我尝试创建一个 HTML 对象 添加以下内容
  • 模块化大型 Grails 应用程序的最佳实践?

    我正在开发的 Grails 应用程序变得相当大 最好将其重构为几个模块 这样我们就不必每次都重新部署整个事情 将 Grails 应用程序拆分为多个模块的最佳实践是什么 特别是 我想创建一个域类 相关服务的包 并将其作为模块在应用程序中使用
  • 如何使用CellTable进行单行扩展?

    我正在尝试使用新的 GWT CellTable 小部件 但我的表格需要支持单行扩展 即行的左侧有一个 zippy 单击它时 该行应该扩展以提供更多详细信息 并且该行应该跨越所有列 是否可以使用 CellTable 来实现此目的 如何动态添加
  • 有没有适用于 IE 的 websocket 插件?

    有没有适用于 IE 的插件 我可以在 IE 7 8 9 中使用 Websockets 我还没找到 socket io 使用的后备方案之一是 flash gimite web socket js https github com gimite
  • 将此自定义 JQuery 工具提示脚本转换为 Jquery 插件

    我在一些 stackoverflow 用户的帮助下 使用 Jquery 和通用 Javascript 开发了这个工具提示脚本
  • 用eclipse测试java程序的内存消耗[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 gradle findbugs 插件中将报告的错误打印到控制台?

    我正在使用 Gradle FindBugs 插件 如何将报告的错误打印到控制台 PMD 插件有一个 consoleOutput 属性 FindBugs 是否有类似的属性 如你看到的here https gradle org docs cur
  • gwt-dispatch - GWT 的命令模式替代方案

    有没有替代方案gwt 调度 http code google com p gwt dispatch 在GWT项目中使用 GWT 平台 http code google com p gwt platform has a 调度模块 http c
  • 加载依赖于另一个域的程序集时 FileNotFound [重复]

    这个问题在这里已经有答案了 我正在尝试使用插件制作应用程序 我有 MainLib dll 我在其中制作了一些通用接口 让它成为ICommon 用 1 种方法 然后 我制作了 2 个 dll 插件 它们引用了 MainLib dll 并实现了

随机推荐

  • nginx 反向代理 websocket

    nginx 现在支持代理 websockets 但我无法找到任何有关如何在没有单独的情况下执行此操作的信息location应用于使用 websocket 的 URI 的块 我见过一些人推荐这种方法的一些变体 location proxy h
  • 另一个数组内的 stdClass 对象数组

    我正在尝试从下面的 array1 获取信息 通过执行以下操作 我可以毫无问题地获取场地名称和地点地址 array2 array array3 array foreach array1 as item array2 item gt venue
  • lwjgl 3 , glUniformMatrix4 导致 jre 崩溃

    我正在使用 lwjgl 3 并学习现代 opengl 3 我想将统一矩阵发送到顶点着色器 以便我可以应用转换 我尝试过 但程序因此错误而崩溃 A fatal error has been detected by the Java Runti
  • mpld3图,注释问题

    我正在使用 mpld3 在 Intranet 网站上显示图形 我正在使用将图形保存到字典并使用 mpld3 js 在客户端渲染它的选项 除非我想使用注释 否则该图呈现良好 这些显然是抵消的 我不明白为什么 因为即使我将偏移量设置为 0 0
  • 升压参数库

    最近我发现参数 http www boost org doc libs 1 50 0 libs parameter doc html index htmlBoost 中的库 老实说 我不明白为什么这是 Boost 的一部分 当需要向函数传递
  • 如何只应用一种 clang-format 操作?

    我想用clang 格式调整我的评论 但仅此而已 选项是 AlignTrailingComments bool 但是当我运行以下命令时 clang format 3 6 i style AlignTrailingComments true
  • 获取无平方数的列表

    获得该值的一种方法是自然数 1 n 我们对每个因子进行因式分解 看看它们是否有重复的质因数 但这对于大的情况来说会花费很多时间n 那么有没有更好的方法从 1 中获取无平方数n 您可以使用埃拉托斯特尼筛法的修改版本 取一个布尔数组 1 n 预
  • 如何将typescript添加到Vue 3和Vite项目中

    我的设置 我通过以下方式安装了 Vue 和 Vite创建 vite 应用程序模块 然后将 init vite app 生成的所有包更新为 Vue 和 Vite 的最新 RC 版本 现在我想对我的所有代码使用打字稿 首先我只是玩了一下 然后添
  • 横切关注点示例

    什么是一个很好的例子cross cutting concern 医疗记录示例维基百科 http en wikipedia org wiki Cross cutting concern页面对我来说似乎不完整 具体来说 从这个例子来看 为什么日
  • 规范注册 ID 和消息 ID 格式

    我的理解有问题Canonical Registration Id并让谷歌返回它 我特意注册了两次我的Android应用程序 以测试Canonical Registration Id 但是当我尝试向两者推送消息时Registration Id
  • 为什么需要为每个线程创建 ABAddressbookRef?

    苹果说 重要提示 ABAddressBookRef 的实例不能被多个使用 线程 每个线程必须创建自己的实例 But why 我知道某些特定的类或操作必须在主线程中完成 而且我知道有些对象不是线程安全的 这意味着如果这些对象同时被两个不同的线
  • 创建一个跨浏览器 mixin 进行转换:旋转

    我想为 sass 创建一个 mixin 它将对指定元素应用旋转 mixin 应采用一个参数 表示要应用的旋转度数 从 css3please com 我找到了一种使用 CSS 实现此功能的跨浏览器方法 box rotate moz trans
  • 如何从特定 Sourceforge 项目下载所有文件?

    在花了大约一个小时从 sourceforge 下载几乎每个 Msys 包之后 我想知道是否有更聪明的方法来做到这一点 是否可以使用 wget 来实现此目的 我已经成功地使用了这个脚本 https github com SpiritQuadd
  • 文件/文件夹结构的递归搜索

    我正在尝试为返回文件和文件夹列表的 Web 服务构建递归搜索功能 我创建了这两个方法 因此它们充当递归搜索 它首先获取顶级内容 然后将任何文件添加到 fileList 并将任何子文件夹添加到 subFoldersList 我们传入访问级别
  • 无限滚动 jQuery 和 Laravel 5 分页

    我成功从控制器返回数据 public function index posts Post with status verified gt paginate 30 return view show gt with compact posts
  • 使用 PSEXEC 远程启动和停止 Windows 服务

    如何使用 PSEXEC 远程启动和停止 Windows 服务 最好是编写语法我尝试了下面给出的 cmdlet psexec Server u Administrator p Somepassword ServiceName SysInter
  • 虚拟继承 - 跳过构造函数

    我有以下课程 class Socket Socket Socket SOCKET s class Connection public virtual Socket Connection IP ip 这两个类包含一些纯虚函数和一些非虚函数以及
  • useState 由于某种原因没有更新?

    当我尝试使用 axios 从后端 API 获取一些数据 并在由于某种原因获得结果后设置状态时 状态不会更新 当我尝试使用状态时 它只会向我显示一个空数组 但有趣的是当我console log res data 它会毫无问题地向我显示我的列表
  • 设置restrict_xpaths设置后出现UnicodeEncodeError

    我是 python 和 scrapy 的新手 将restrict xpaths 设置设置为 table class lista 后 我收到了以下回溯 奇怪的是 通过使用其他 xpath 规则 爬虫可以正常工作 Traceback most
  • 如何使您的 GWT 应用程序可插入?

    我正在 与我的团队 编写一个 GWT 应用程序 它解析并表示一些特定于领域的语言 例如 使用文本 视频和 UI 控件播放媒体演示 所以应用程序有一组组件 一个 用于保存模型 一个 用于控制例程 控制器 当然我们还有视图类 现在我们遇到了一个