2017-08-27 3 views
0

GWTでCircuit Sandboxクライアントを開発する必要があります。 https://unpkg.com/circuit-sdkはES6を使用しているので、GWT JSNIは使用できません。 https://circuit.github.io/jssdk.htmlに 'Teaser example to logon and fetch conversions'をコーディングしています。 JavaScriptの知識は初心者のように言わなければなりません。IsInteropまたはBabelを使用したGWTアプリでサーキットサンドボックスクライアントを実現するにはどうすればよいですか?

私は2つの選択肢があると思います: 私の最初の選択肢は、GWTのJsInteropを使用することです。 (。。私はこのGWTアプリののWebSocketを実現するために、すでにこれを使用 。したがって、私は例「http://www.g-widgets.com/2017/03/16/example-of-using-websockets-in-gwt-with-a-spring-boot-server/」を使用し、これが正常に動作します)

サーキットのクライアントのために私は、次のJavaクラスを記述するために開始しました:

@JsType(isNative = true, namespace = JsPackage.GLOBAL) 
public class Client { 
    @JsConstructor 
    public Client(final String token, final String readings, final String uri) { 
    } 

    @JsMethod 
    public native void logon(); 

// The old JSNI code (not usable here): 
// public static native void logon() /*-{ 
//  client.logon() 
//  .then(user => console.log('Successfully authenticated as ' + user.displayName)) 
//  .then(client.getConversations) 
//  .then(conversations => conversations.forEach(c => console.log(c.convId))) 
//  .catch(console.error); 
// }-*/; 
} 

JavaScriptコードが定義されていないため、ログオン方法が実装されていないため、このコードは機能しません。

どうすればJavaScriptモジュール「回路」にアクセスできますか?logon()メソッドを実装する方法を教えてください。 また、このJsInteropクラスを動作させるには他に何が必要ですか?

第2の選択肢:Babelを使用してhttps://circuitsandbox.net/sdkをES5に変換しました。私はGWTのアプリで構築されたスクリプトを含まれており、以下のようにログオン 方法を実現しようとした:

[ERROR] Line xx: missing name after . operator 

このエラーが発生します。私はメソッドを呼び出すと

client(); 

public static native void client() /*-{ 
    var client = new $wnd.Circuit.Client({ 
     client_id: '78cafde2f6854ad5ad80a67c532687bc', 
     scope: 'READ_USER_PROFILE,READ_CONVERSATIONS', 
     domain: 'circuitsandbox.net' 
}); 

    client.logon().then(function (user) { 
     return console.log('Logged on user:', user); 
    }).catch(console.error); 
}-*/; 

が、私はいくつかのエラーを取得しますJSNIはES6をコンパイルできません。

私はjavascriptのMethodeのclient.logonをコメントアウトした場合、私はonotherエラーを取得:

"TypeError: Cannot read property 'Client' of undefined" 

var client = new $wnd.Circuit.$wnd.Client(... 

も動作しません。

私は何をすればいいのか教えてもらえますか?

多くの方々のおかげで、誰かが私をここで助けることができれば、本当にとても嬉しく思っています。

答えて

0

サーキットがあなたのコード(JSNI内)がES6を使用しなければならないES6を使用するからではありません。ラムダを匿名関数に置き換えることができます。 2番目のスニペットと

public static native void logon() /*-{ 
    client.logon() 
    .then(function(user) { console.log('Successfully authenticated as ' + user.displayName); }) 
    .then(client.getConversations) 
    .then(function(conversations) { conversations.forEach(function(c) { console.log(c.convId)); } }, console.error); 
}-*/; 

同様に:catchがキーワードであるためと、あなたはthenメソッドへの2番目の引数として、あなたのキャッチ方法を渡す必要があります。

+0

トーマスにお返事ありがとうございました! –

+0

申し訳ありません。私はenterを押してコメントが保存されました。私が言いたいのは、エラーが発生したということです。[エラー]行17:構文エラー [情報]> \t \t .then(ユーザー=> console.log( '+ user.displayNameとしてログオン))。あなたは 'クライアント'クラスのコード全体を投稿できますか?前もって感謝します。 –

+0

jsniで '=>'矢印を使うことはできません。そのような新しいJSをサポートしていません。代わりに、上記の答えのように古い 'function(user){...}'を使用してください。 –

関連する問題