- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试尝试 GWT,看看迁移是否能成功。我通常会先尝试更困难的部分,以确保我能够完成项目。我的项目中最困难的部分是引用第 3 方 JS 库。在此示例中,我尝试使用 PubNub,因为我们的大部分平台都使用它。
我想做的是创建一个可重用的对象,可以在需要 PubNub 的其他 GWT 项目中使用。我已经成功运行了一个简单的小测试(即,我已经掌握了 JNSI 工作的基础知识),但我的问题是 -> 我应该在哪里放置对第 3 方脚本的引用才能正确创建库/模块?
现在我只是将对外部脚本的引用放在项目的 HTML 页面中,但我很确定从可重用性的角度来看这是不正确的,因为这个库将在其他项目中使用,每个项目都会有自己的基本 HTML 页面。
我尝试将引用放入 gwt.xml 文件中,但这似乎丢失了引用(即我的测试项目不再像脚本位于 HTML 页面中时那样工作)
关于如何将第 3 方库包含在可重用的 GWT 库/小部件中,您有什么建议吗?
最佳答案
这里有一个使用客户端 bundle 和脚本注入(inject)器的示例,您可以使用同步加载或异步加载。
当使用sync时,外部js内容将嵌入到应用程序中,否则它将包含在通过ajax请求获取的不同片段中。
您可以将您的 api 放在任何服务器中并使用 ScriptInjector 加载它。
public class Example {
public static interface MyApiJs extends ClientBundle {
MyApiJs INSTANCE = GWT.create(MyApiJs.class);
@Source("my_api.js")
TextResource sync();
@Source("my_api.js") // Should be in the same domain or configure CORS
ExternalTextResource async();
}
public void loadSync() {
String js = MyApiJs.INSTANCE.sync().getText();
ScriptInjector.fromString(js).inject();
}
public void loadAsync() throws ResourceException {
MyApiJs.INSTANCE.async().getText(new ResourceCallback<TextResource>() {
public void onSuccess(TextResource r) {
String js = r.getText();
ScriptInjector.fromString(js).inject();
}
public void onError(ResourceException e) {
}
});
}
public void loadFromExternalUrl() {
ScriptInjector.fromUrl("http://.../my_api.js").inject();
}
}
[已编辑]
更好的方法是使用 gwtquery 中的新功能1.4.0 名为 JsniBundle 。我们在GWT.create期间引入了此功能。在旧金山和法兰克福举行的 session 。
通过这种方法,您可以插入任何外部 javascript(放置在源代码树中或托管在外部主机中)作为 JSNI block 。它有很多好处:
语法实际上很简单:
public interface JQueryBundle extends JsniBundle {
@LibrarySource("http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
public void initJQuery();
}
JQueryBundle jQuery = GWT.create(JQueryBundle.class);
jQuery.initJQuery();
关于gwt - 如何将第 3 方 JavaScript 库包含在可重用的 gwt 库/小部件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812164/
我是一名优秀的程序员,十分优秀!