1

簡単な質問ですが、私はJavaScriptにかなり慣れていないので、間違いなくこのプロジェクトから多くのことを学びます。だから私は質問を提案します(それはばかげたものかもしれません)、私の質問は:

RaphaelまたはJoint.jsのいずれかから動的に形状を生成するWebアプリケーションを構築することを計画しています。これらは両方とも非常に似ています。動的とは、ユーザーが入力するまで、描画するオブジェクトの量が未定義になることを意味します。彼らが描きたいオブジェクトの数-それで、私の質問を補強するためのいくつかのコードがあります:

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);

var e1 = erd.Entity.create({
    rect: {
        x: 220,
        y: 70,
        width: 100,
        height: 60
    },
    label: "Entity"
});

だから、私は長方形タイプのオブジェクトを作成しましたが、これが私が知りたいことです-これを行うことができますか?

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
int x, y;
for (int i = 0; i < numOfUserDefObjects; i++) {
    var e1 = erd.Entity.create({
        rect: {
            x: x,
            y: y,
            width: 100,
            height: 60
        },
        label: "Entity"
        x + 20;
        y - 40;
    });
}

すべてが私を困惑させるものです、var e1。作成するオブジェクトが2つある場合、ループで2回目のループを繰り返すたびに、ループで作成された最初のオブジェクトがSVG / Canvasから消去/削除/上書きされますか?2番目のオブジェクトを作成しますか?

これについて少し洞察していただければ幸いです。繰り返しになりますが、JavaScriptの経験が不足していますが、それは変わるでしょう。

再度、感謝します。

4

1 に答える 1

2

javascriptでは、で宣言されたローカル変数varは関数スコープを持っています。つまり、関数ごとにそのローカル変数のコピーが1つだけ存在するということです。したがって、2番目のコードブロックには変数のコピーが1つだけe1あり、forループは反復ごとに異なる値を割り当てています。

実行していることを実行できますが、e1実行が完了するとその値は1つだけになり、その値は、for割り当てられたループの最後の反復に関係なくなります。

何を達成しようとしているのか正確にはわかりませんが、次のようにオブジェクトの配列を作成できます。

var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
var x = 0, y = 0;
var objs = [];
for (var i = 0; i < numOfUserDefObjects; i++) {
    objs.push(erd.Entity.create({
        rect: {
            x: x,
            y: y,
            width: 100,
            height: 60
        },
        label: "Entity"
    }));
    x += 20;
    y -= 40;
}
// objs now contains an array of the created objects

注:xとyも初期化し、var代わりに使用する宣言を修正し、ループint内のxとyを正しくインクリメントおよびデクリメントしました。for投稿したコードに多くの構文エラーがありました。

于 2013-02-07T15:22:37.050 に答える