2011-12-17 8 views
0

キャンバス(イメージ、シェイプ、選択ボックス)上のさまざまなオブジェクトの状態を記録して、XMLまたはJSONにシリアライズできるようにする方法を見つけようとしています。シリアル化のオブジェクト状態を記録する

var shapeState = { //Example of a shape being recorded 
          number:increment, 
          id:thisCanvas, 
          type:'shape', 
          kind:shapeKind, 
          cheight:canvasHeight, 
          cwidth:canvasWidth, 
          height:shapeHeight, 
          width:shapeWidth, 
          color:shapeColor, 
          x:xPos, 
          y:yPos 
         } 

         totalState.push(shapeState); //State of shape data has been stored in global array 

しかし、形状(またはその他のオブジェクト)が静的である場合にのみ機能します。私は、グローバル配列に各オブジェクトを配置しようとしました。たとえば、「移動」ボタンをクリックした後に要素を移動すると、xPosプロパティはどのように更新できますか?シェイプオブジェクトはすでに配列内に配置されており、名前では識別できません。グローバル配列に100以上の図形があるとすれば、更新する特定のものをどのように見つけることができますか?助けてください。ここ

はフィドルです:http://jsfiddle.net/RymyY/5/

答えて

0

ここに1つのアプローチです:Shapeがインスタンス化されるときに、このモデルでは

var AllShapeStates = {}; 

function Shape() { 
    var SerializedState = {}, 
     number, 
     thisCanvas, 
     etc; 
    AllShapeStates[UNIQUE_IDENTIFYING_ATTRIBUTE] = SerializedState; 
    //Shape Business 

    this.updateState = function(){ 
     SerializedState.number = number; 
     SerializedState.id = thisCanvas; 
     //etc 
    } 
} 

が、それはグローバルAllShapestates VARにそのSerializedStateへの参照を追加します。 Shapeが状態を更新するたびに、SerializedStateオブジェクトを更新するupdateStateを呼び出す必要があります。

+0

@ Shad - あなたのソリューションが1つの視聴の寿命を超えて続く方法を理解していません。ユーザーがページを終了して別のサイトにアクセスして戻った場合、その図形は消えてしまいます。 ASP.NETについてよく知りませんが、おそらく '[_VIEWSTATE]'変数をここで使用できますか? – dopatraman

+0

@codeninjaあなたの質問はJavaScriptとしてタグ付けされていますが、私は '.NET'がどこになるのか分かりません。私の答えでは、正確な状態は、与えられた任意の形状に対して常に 'AllShapeStates'の内部でアクセス可能です。 – Shad

関連する問題