XMLHttpRequest是来自GWT客户端的HTTP调用的替代方案,允许控制请求/响应的所有方面.但是怎么用呢?javadoc地址:http://www.gwtproject.org/javadoc/latest/com/google/gwt/xhr/client/class-use/XMLHttpRequest.html
我在@JsFunction 部分的文档https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#中尝试了这些示例,但是它仅提供了从javascript调用Java函数的想法。
我的GWT应用程序中包含一个javascript文件,其中包含以下代码:
var client = new Circuit.Client({
client_id: '78cafde2f6854ad5ad80a67c532687bc',
scope: 'READ_USER_PROFILE,READ_CONVERSATIONS',
domain: 'circuitsandbox.net'
});
function startLogon() {
client.logon()
.then(user => console.log('Logged on as ' + user.displayName))
.then(client.addEventListener('itemAdded', item => console.log('itemAdded event received:', item)))
.then(client.getConversations)
.then(conversations => {
console.log('Retrieved ' + conversations.length + ' conversations');
return client.addTextItem(conversations[0].convId, 'Hello World');
})
.then(item => console.log('Msg sent on ' + (new Date(item.creationTime)).toString()))
.catch(console.error);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想使用jsInterop批注从我的应用中调用函数“ startLogon()”(使用包装器)。我尝试了以下两个示例,但均未成功:
使用GWT JsInterop实现Javascript函数回调
我不得不说,我的JavaScript知识很不好。
有人可以给我一个代码示例吗?提前谢谢了!
我正在使用带有 elemental2-1.0.0-RC1 的 GWT 2.9。
以下代码ClassCastException在运行时抛出 a :
DocumentRange documentRange = Js.cast(DomGlobal.document); // Fails
Range range = documentRange.createRange(); // Never reaches here
Run Code Online (Sandbox Code Playgroud)
当我改为使用 an 时Js.uncheckedCast(),它成功了:
DocumentRange documentRange = Js.uncheckedCast(DomGlobal.document);
Range range = documentRange.createRange(); // Works
Run Code Online (Sandbox Code Playgroud)
的文档Js.uncheckedCast()说:
“你应该总是更喜欢定期投射(除非你知道自己在做什么!)。”
我不知道为什么我必须使用它,所以我感到紧张。有人可以解释如何Js.cast()执行其类型检查以及为什么我需要Js.uncheckedCast()在这种情况下使用 an吗?
让我说我有一个com.google.gwt.dom.client.Document gwtDocument节点,我想将其转换为elemental2.dom.Document?
由于Document扩展了JavaScriptObject,我认为我可以做类似的事情:
elemental2.dom.Document elementalDoc = (elemental2.dom.Document)(gwtDocument);
Run Code Online (Sandbox Code Playgroud)
但是,使用jsinterop的elemental2类不会扩展JavaScriptObject.那么如何在两者之间进行转换呢?
谢谢!
我在GWT中有以下实体
@JsType(namespace = "my.entities")
public class MyEntity {
private Set<String> texts;
public Set<String> getTexts(){
if(this.texts==null)
this.texts=new LinkedHashSet<String>();
return this.texts;
}
public void setTexts(Set<String> texts){
this.texts=texts;
}
}
Run Code Online (Sandbox Code Playgroud)
当我myEntityVar.getTexts()用Java语言调用时,返回的对象是HashSet。似乎jsinterop将HashSet的java实现转换为JavaScript。但是如何使用JavaScript创建新的HashSet myEntityVar.setTexts(texts)呢?我为“文本”参数尝试了一个数组,但这不起作用。因此,我需要以某种方式在JavaScript中使用HashSet。但是,我不知道在哪里找到它。任何的想法?