0

@haehn ハイヘーン (XTK)

GWT で edge-XTK を使用し、単純な STL をレンダリングしようとしています。ただし、XTK コードはメッシュに色を割り当てる行で失敗します。

mesh.color = [0.7,0,0] // this line fails

XTK コードによって発行されたエラー メッセージ:"Invalid color"

この動作は、GWT で XTK を使用する場合にのみ観察されます。

エラーは、この XTK コード スニペットから発生しているようです

X.displayable.prototype.__defineSetter__('color', function(color) {

  // we accept only numbers as arguments
  if (!goog.isDefAndNotNull(color) || !(color instanceof Array) ||
      (color.length != 3)) {

    throw new Error('Invalid color.');

  }

問題は、GWT が iframe を使用してページを作成する方法にあると推測しています...そのため、上記の if 条件が GWT で失敗する可能性があります。上記のチェックを次のスニペットに置き換えると思います(ここからアイデアを得ました)。問題が解決する場合があります。

use goog.isArray(color) instead of (color instanceof Array)

調査してコメントしていただけますか?

編集:

こんにちはXTK

GWT で XTK を使用する方法を示すコード スニペットを次に示します。

public class TestGwtXtk implements EntryPoint {

public void onModuleLoad() {
    testXtk();
}

    // GWT JSNI method, which allows mixing Java and JS natively. 
    // it is akin using c++ or c libraries in java or android

private native void testXtk() /*-{
    var r = new $wnd.X.renderer3D();
    r.container = 'xtk_container'; // div ele
    r.config.PROGRESSBAR_ENABLED = false;
    r.init();

    cube = new $wnd.X.cube();
    cube.lengthX = cube.lengthY = cube.lengthZ = 20;
    cube.color = [ 1, 1, 1 ]; // fails here in XTK code
    cube.center = [ 0, 0, 0 ]; // fails here in XTK code
    r.add(cube);
    r.render();
}-*/;

}

インライン コメントで指摘されているように、javascript 配列の使用は失敗します。失敗は、[0,0,0] や new Array(0,0,0) などの js 配列の使用法が間違っているためではありません。失敗は、XTK コードが「配列のインスタンス」をチェックする方法によるものです。

編集:2

親愛なるXTK

git から XTK コードをチェックアウトし、提案している変更を加え、XTK.js を再構築し、最終的に私の修正が問題を解決することをテストすることができました。

例: displayable.js で 1 行コメントし、次のように別の行を追加しました。

// if (!goog.isDefAndNotNull(color) || !(color instanceof Array) || (color.length != 3)) {

if (!goog.isDefAndNotNull(color) || !(goog.isArray(color)) || (color.length != 3)) {

ユースケースを実現するために、xtk コードベースの他のいくつかの場所で同様の変更を行いました。これが正しい解決策である理由の説明は、次のとおりです: Closure: The Definitive Guide。リリース 8 のコードベースでこの修正を行うことを検討していただけますか? ありがとうございました

4

1 に答える 1

1

GWT で XTK を使用していますか? どう言う意味ですか ?Java から JavaScript への xtk 呼び出しでコードをコンパイルする独自のラッパーを作成しましたか? それとも、war ファイルで xtk.js を直接使用し、それを使用して手動で JavaScript を記述しますか? それとも、Web アプリケーション用の Google 環境である GAE (Google App Engine) のみを使用しますか (GWT で作成され、Java からコンパイルされていないもの)。もっと正確にお願いできますか?

ここでは、GWT と型テストに関するいくつかの問題を扱います。「new」演算子を使用して配列を作成しようとしましたか?

var mycolor = new Array(0.7,0,0);
mesh.color = mycolor;
于 2012-06-18T07:39:08.353 に答える