如何使您的 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 应用程序可插入? 的相关文章

  • 为什么 JavaScript 文件在我的 Cake 插件中被解析为 PHP?

    我正在开发的 Cake 插件中包含的 JavaScript 之一出现问题 由于某种原因 JavaScript 文件被解析为 PHP 文件 因此加载该文件会抛出此错误 这是 PHP 解析错误 b Parse error b syntax er
  • Servlet 过滤器在 AWS 上返回“代理错误”

    我已经设置了一个Filter为我的 GWT Web 应用程序添加爬网程序支持 这个想法是捕获所有包含 escaped fragment 并为爬虫提供快照 我已经设置了Filter使用 Guice 如下 filter through Craw
  • 如何在 CKEditor 中更改已注册的对话框

    我正在尝试编写一个插件 向图像对话框添加一个附加选项卡 页面 我不想更改对话框的源本身 而是使用插件来增强它 我搜索文档和论坛已经有一段时间了 现在我知道我可以在对话框对象上调用 addPage 来添加另一个选项卡 我也了解内容对象必须是什
  • 从输入跳到 CellTable 中的输入

    我有一个 CellTable 其中包含一堆渲染到的单元格
  • 带有编辑器框架的 GWT 验证器

    有没有人意识到编辑器和 jsr 303 验证如何与 GWT 2 3 一起工作 未来 验证 API 已添加到 gwt sdk 但我无法使用编辑器框架验证实体 无论 我确实从来没有从客户端或服务器端抛出错误 这是一个代码片段 public cl
  • 运行 GWT 的“MobileWebApp”示例时出现“HTTP 错误:500 无领域”

    我正在尝试运行 GWT 2 4 示例应用程序 MobileWebApp 当我尝试通过 Eclipse 在开发模式下运行应用程序时 出现 500 No Realm 错误 我知道这是一个身份验证问题 我不熟悉 Google App Engine
  • 什么插件/工作台框架是 Eclipse RCP 的最佳 .NET 替代品?

    我正在寻找一个与 Eclipse 插件框架相当的基于插件的应用程序框架 在我看来 它包括 a core 插件管理框架 Equinox OSGI 它提供了声明扩展端点 然后发现并加载为这些端点提供服务的插件的能力 这与依赖注入不同 但不可否认
  • Vaadin - GWT 错误“模块 xxx 可能需要重新编译

    我正在加大 Vaadin 的力度 每当我尝试运行演示应用程序时 都会收到此 javascript 警报 GWT module com vaadin terminal gwt DefaultWidgetSet may need to be r
  • Cordova/Phonegap 通过 JavaScript 在应用程序浏览器中打印

    我想从我正在开发的 iPad 应用程序打印一页 或某些页面 应用程序启动时所做的第一件事是通过以下代码加载外部网站 window location https 我现在想从这个外部网站打印一些东西 在 iPad 上的 Safari 中效果很好
  • 为 Rails 3 应用程序制作自定义插件/gem/引擎

    我正在遵循指南http edgeguides rubyonrails org plugins html http edgeguides rubyonrails org plugins html而且它似乎有点过时了 您能看一下并告诉我哪些部分
  • 测试 GWT 代码的最佳方法是什么[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • GWT 和 Web 服务 (wsdl)

    谁能告诉我一种从 GWT 客户端访问 WSDL Web 服务的方法 这可能吗 Thanks 智能网关 http www smartclient com product index jsp支持 WSDL 数据源 除此之外 您始终可以将 WSD
  • 如何使您的 GWT 应用程序可插入?

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

    我一直在谷歌上查看 没有任何内容真正指出这个问题 当我运行 mvn clean install 时 它返回以下错误 错误 无法解析的构建扩展 插件 org sonatype flexmojos flexmojos maven plugin
  • Eclipse(STS)+ Maven

    我基本上有两个问题 有没有办法从 Eclipse 调用 Maven 控制台 我可以在哪里写eclipse eclipse 并开始构建 eclipse 项目 哪里有STS http www springsource com products
  • Javascript图像编辑插件

    在哪里可以找到 Javascript 或 jQuery 图像编辑器插件 用户可以单击图像进行编辑 并且该插件允许他们进行裁剪 调整大小 旋转 翻转等 Pixastic http pixastic com lib 不再活跃 和CamanJS
  • 根据外形尺寸更改入口点类别

    如果用户从移动 Web 浏览器或桌面 Web 浏览器访问 我希望在我的 GWT 应用程序中加载不同的用户界面 我想知道如何编辑我的 Application gwt xml 文件 更改根据外形规格加载哪个入口点类 我认为这可能是这样的 但我只
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • GWT 主题/模板 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 GWT 开发一个应用程序 尽管 GWT 是基于 JAVA 的媒介 但外观和感觉只能通过 CS
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 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 控件播放媒体演示 所以应用程序有一组组件 一个 用于保存模型 一个 用于控制例程 控制器 当然我们还有视图类 现在我们遇到了一个