1

一部のJavascriptAPIをGoogleWebToolkitのJSNIでラップしようとしたときに質問がありました。javascript APIは、クラウドベースのサーバーであるParse.comによって提供されます。私のコードは次のようなものです:

public class MMParseComm {

  private MMProject project = new MMProject();//MMProject has a member: String projectName.

  private String _projectName;

  private native void _retrieveCurrentProject_step1(int projectId) /*-{
    var ProjectList = $wnd.Parse.Object.extend("ProjectList");
    var query = new $wnd.Parse.Query(ProjectList);
    query.equalTo("projectId", projectId);
    query.find({
        success: function(results) {
            //Questions here: In this function, I can access "_projectName" by 
            //this.@net.myname.myproject.myapi.client.MMParseComm::_projectName, 
            //but cannot access "project.projectName" using the same syntax.
            //Also, I have searched around but cannot find a way 
            //that can write out a JSON data retrieved in "results" 
            //as a JSONObject in Java.
        },
        error: function(error) {
                $wnd.alert("Error");
        }
    });
  }-*/;
}

上記のコードに示されているように、質問はコードのコメント部分にあります。配列内の文字列をどのように書き出すことができるかわかりませんresultsproject.projectNameresultsまた、 JavaScriptで取得したJSONデータをJavaのJSONObjectにラップするにはどうすればよいですか?

前もって感謝します!

ウェイビン

4

1 に答える 1

0

JSNI外部呼び出し構文がチェーン呼び出しをサポートしているとは思わないため、project.projectNameにアクセスできません。

Projectタイプの外部JavaScriptプロトタイプがあると仮定します。ここでは、JSONObject APIを使用して解析するよりも、オーバーレイタイプを作成する方が適切です。これは、操作がより効率的で簡単です。始めましょう。

public class MMProject extends JavaScriptObject
{
    protected MMProject () { }

    public final native String getProjectId() /*-{
        return this.projectId;
    }-*/; 
}

次に、成功コールバックでラッパーを利用します。

結果はおそらく配列型であると思われるため、実装は次のようになります。

public class MMParseComm
{
    private JsArray<MMProject> projects = null;

    private native void _retrieveCurrentProject_step1(int projectId) /*-{
        var ProjectList = $wnd.Parse.Object.extend("ProjectList");
        var query = new $wnd.Parse.Query(ProjectList);
        query.equalTo("projectId", projectId);
        query.find({
            success: function(results) {
                this.@net.myname.myproject.myapi.client.MMParseComm::projects = results;
            },
            error: function(error) {
                $wnd.alert("Error");
            }
        });
    }-*/;
}

オブジェクトモデルの詳細を知らなくても、これがアドバイスできる最善の方法です。さらに明確にする必要がある場合は、私がお手伝いします。

于 2012-10-08T07:56:14.307 に答える