2017-08-29 105 views
3

我在@JsFunction部分试过了文档https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit# 中的例子,但它只给出了从javascript调用java函数的方法。如何使用jsInterop从GWT调用JavaScript函数?

我已经列入我用下面的代码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); 
} 

现在我想调用的函数“startLogon()” - 我是用包装材料 - 使用jsInterop我的应用程序注释。我想这两个下面的例子没有任何成功:

Implement Javascript Function Callback with GWT JsInterop

JsInterop wrapping a javascript function property

我不得不说,我的JavaScript的知识是非常糟糕的。

有人可以给我一个代码示例吗? 非常感谢提前!

+0

@EJoshuaS因为GWT将Java编译成可比较的JS,这就是问题所在。 –

+1

你能澄清一下返回值是什么吗?这是一个Promise,你会在你的Java代码中使用吗?或者你会在Java中调用'startLogon()'然后完成? –

回答

2

将此静态方法添加到任何类。

@JsMethod(namespace = GLOBAL) 
public static native void startLogon(); 

这将工作,虽然你不能对返回的承诺做任何事情。如果您想使用退还的承诺,我建议添加elemental2并改为使用Promise startLogon()