3

我在@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);
}

现在我想使用 jsInterop 注释从我的应用程序中调用函数'startLogon()' - 我使用包装器。我尝试了以下两个示例,但均未成功:

使用 GWT JsInterop 实现 Javascript 函数回调

包装 javascript 函数属性的 JsInterop

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

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

4

1 回答 1

7

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

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

这将起作用,尽管您无法对返回的承诺做任何事情。如果您想使用返回的承诺,我建议您添加 elemental2 并Promise startLogon()改为使用,这样您就可以像这样使用它:

startLogon().then(
    success -> { console.log("success", success); return null; },
    failure -> { console.log("failure", failure); return null; });
于 2017-08-30T05:41:53.620 回答