2009-07-24 5 views
2

jQueryを使用してデータを表現するHTMLとHTMLを使用するWebアプリケーションを作成します。単一のデータノードに関連する文書には、いくつかの表現が存在し得る。ユーザーは動的に作成することができます。 たとえば、データは表で表され、表で変更できます。さらに、ユーザは、特定のデータに迅速にアクセスするための「概要パネル」を拡張するという意見があります。jQuery/XML:DOM-Mutation-Eventsを使用したデータと表現の同期

イベントをトリガーするユーザーコントロールが1つ=>データを変更する必要がある場合=>同じデータに関連する他のユーザーコントロールをリフレッシュする必要があります。

<html> 
<head> 
    <title>synchronize</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    $(function() { 

     //handling data 

     $.ajax({url: "./data/config.xml", cache: false, async: false, success: init}); 
     var data; 
     function init(d) { 
      data = d; 
      $(".bottle", data).bind("DOMAttrModified", notifyRep); 

     } 
     function notifyRep(e) { 
      if(e.relatedNode.nodeName == "content") 
       $(this).trigger("changeContent"); 
     } 

     //handling representation-sync 

     $(".bottle", data).bind("changeContent", function() { 
      $("#bottleRep1").val($(this).attr("content")); 
     }); 

     $(".bottle", data).bind("changeContent", function() { 
      $("#bottleRep2").val($(this).attr("content")); 
     }); 

     //handling modification 

     $("#bottleRep1").bind("change", function() { 
      $(".bottle", data).attr("content", $(this).val()); 
     }); 

     $("#bottleRep2").bind("change", function() { 
      $(".bottle", data).attr("content", $(this).val()); 
     }); 

    }); 
    </script> 
</head> 
<body> 
    <div id="app"> 
     <span>bottle-content:<input id="bottleRep1" type="text" value="test" /></span> 
     <span>bottle-content:<input id="bottleRep2" type="text" /></span> 
    </div> 
</body> 

実際の問題は、各ユーザーコントロールが独自の変更を処理することです。チェンジ・コンテンツ・ハンドラは、データ・モディファイアを知る必要があるため、表現更新をスキップできます。 この種の問題に対する既存の一般的な解決法はありますか? そうでない場合は、良い解決策を提案できますか?

答えて

0

あなたは、いくつかのアクションを実行すると、トリガリフレッシュのため
$(「体」)。バインド(「foo」で、機能(E、PARAM1、PARAM2){
アラートを処理するカスタム関数を作成しようとすることができます(param1 + ':' + param2);
});

機能は、トリガを取得し、この
$(「体」)のようなリフレッシュ
を行うので、あなたはDTAのchnageに上記で作成した関数を呼び出すことができます。トリガー(「foo」で、[「バー」、「バム」 ]); //アラート 'bar:bam'

関連する問題