2016-12-06 20 views
-1

私は2つのjavascript関数をオブジェクトプロパティとして使用します。私は2つの機能を同時に実行したい。私はそれらをplanogramの機能に参加させましたが、まだ機能しておらず、エラーを出しています。ここに私のコードです。2つのJavaScript関数を同時に実行するには?

function planogram(node, pt, gridpt) { 
     avoidNodeOverlap(node, pt, gridpt); 
     stayInGroup(node, pt, gridpt); 
    } 

     // a Part.dragComputation function that prevents a Part from being dragged to overlap another Part 
    function avoidNodeOverlap(node, pt, gridpt) { 

     // this assumes each node is fully rectangular 
     var bnds = node.actualBounds; 
     var locate = node.location; 

     // see if the area at the proposed location is unoccupied 
     // use PT instead of GRIDPT if you want to ignore any grid snapping behavior 
     var x = gridpt.x - (locate.x - bnds.x); 
     var y = gridpt.y - (locate.y - bnds.y); 
     var r = new go.Rect(x, y, bnds.width, bnds.height); 

     // maybe inflate R if you want some space between the node and any other nodes 
     if (isUnoccupied(r, node)) return pt; // OK 
     return locate; // give up -- don't allow the node to be moved to the new location  
    } 

    function stayInGroup(part, pt, gridpt) { 
     // don't constrain top-level nodes 
     var grp = part.containingGroup; 
     if (grp === null) return pt; 
     // try to stay within the background Shape of the Group 
     var back = grp.findObject("rack"); 
     if (back === null) return pt; 
     // allow dragging a Node out of a Group if the Shift key is down 
     if (part.diagram.lastInput.shift) return pt; 
     var p1 = back.getDocumentPoint(go.Spot.TopLeft); 
     var p2 = back.getDocumentPoint(go.Spot.BottomRight); 
     var b = part.actualBounds; 
     var loc = part.location; 
     // find the padding inside the group's placeholder that is around the member parts 
     var m = (grp.placeholder !== null ? grp.placeholder.padding : new go.Margin(0)); 
     // now limit the location appropriately 
     var x = Math.max(p1.x + m.left, Math.min(pt.x, p2.x - m.right - b.width - 1)) + (loc.x-b.x); 
     var y = Math.max(p1.y + m.top, Math.min(pt.y, p2.y - m.bottom - b.height - 1)) + (loc.y-b.y); 
     return new go.Point(x, y); 
    } 

私もavoidNodeOverlap関数内stayInGroup関数を呼び出すしようとしましたが、stayInGroup機能は無視すること。もし私が本当にそれを感謝するのを助けるアイデアがあれば。私の悪い文法のおかげで申し訳ありません

+0

@Satpalそれはなぜ並列を実行するのでしょうか? – Mahi

+0

@Satpalはまだ働いていません –

答えて

0

これらの2つの関数を順番に実行するか、これらを並列に実行しますか?

JavaScriptが非同期に実行されるため、メッセージに掲載されているコード例では、関数は並列/非同期に呼び出されています。

関数を順番に実行する場合は、関数のコールバックを作成し、1番目の関数のコールバックハンドラで2番目の関数を実行する必要があります。

+0

あなたは私にいくつかのサンプルを与えますか?私は両方(平行または直線)を使用することができます。私はちょうど私の関数を働かせたい –

+0

あなたのコードから 'function planogram(node、pt、gridpt){ avoidNodeOverlap(node、pt、gridpt); stayInGroup(node、pt、gridpt); } ' 2つの関数が非同期に呼び出されています。コードを見ることによって、 'stayInGroup'が期待した結果を出さない唯一の理由は、' no'条件の行です。あなたのメソッド 'stayInGroup'の3。メソッド呼び出しが行番号から早期に終了していないことを確認するために渡される値を確認しましたか? 3? さらに、エラーが発生した場合に生成されるエラーの詳細を提供できますか? –

+0

エラーは '未定義のプロパティ 'x'を読み取れません。 'stayInGroup'関数の中で' if(grp === null)return pt; '行の後に警告を出しますが、私の警告は実行されません。もし私が 'var grp = part.containingGroup;の前に警告を出せば、それは動作します。 注:実際にはその機能が働いています。しかし私が彼らに加わったら、私は困ってしまう。 –

関連する問題