2011-01-31 16 views
0

こんにちは私は、jQueryデータ関数を使用してdivにデータを関連付けるJSPタグ内に生成されたコードをいくつか持っています。uuidを削除するリファクタリングコード

私はUUIDを使用して、ページ上のdivにjQueryスクリプトをリンクしています。 しかし、このアプローチは醜く不便です。UUIDを必要としないようにリファクタリングする方法があるのか​​どうか疑問に思っていました。

コードは次のようになります。

for(DomainObject domainObject : domainObjects){ 
//... 
     String uuid = UUID.randomUUID().toString(); 

     out.println("<div id='" +uuid + "' class='" + divClass + "'>"); 

     // Write out the details of this domain object. 
     out.println(/*...*/); 

     // Associate data with the div 
     out.println("<script type='text/javascript'>$('#"+uuid+"').data('domainObject'," + jsonSerializer.exclude("class").serialize(domainObject) + ")</script>"); 
     out.println("</div>"); 
//... 
    } 
+0

を、あなたのjsの内部に完全なドメインオブジェクトが必要なのでしょうか? –

答えて

1

二つの方法があれば、ドメイン・オブジェクトの使用IDが、代わり

  1. (例はJSTL/ELを使用しています)。

    <div id="do_${domainObject.id}"> 
    ... 
    <script>$('#do_${domainObject.id}').foo();</script> 
    
  2. ループカウンタを使用してください。

    <c:forEach items="${domainObjects}" var="domainObject" varStatus="loop"> 
        <div id="do_${loop.index}"> 
        ... 
        <script>$('#do_${loop.index}').foo();</script> 
    </c:forEach> 
    

ID アルファベット文字で開始しなければならないことに注意してください。 IDで始まるIDは不正です。 UUIDは、数字で始まるIDを返すことがあります。

+0

ああ、私は完全にそれを逃した。はい、あなたは正しいです、それらのいくつかは数字で始まります –

0

何がそんなに醜いか分かりません。たぶんあなたはもっと短いIDがほしいのですか?

ユニークなUUIDです。これは、HTMLページ内の要素上のIDの要件をはるかに超えています。つまり、ページ内で一意です。

1桁または2桁のページ固有IDを作成するのは簡単で適切です。 JSPでrandomUUID()randomPageId()に置き換える必要があります。これは、d1、d2、d3などのシーケンスを返します。

3

jQuery 1.4.3を使用できる場合、domの要素にデータを関連付けるのは非常に簡単な方法です。 1.4.3のとおりjQueryがどのdata attributesための要素を検査し、自動的にあなただけのスクリプトタグを使用している表示されますので、.dataセクション(「キー」)jsfiddle

<div class='myClass' data-domainObject='{"Name": "I am in your data!"}'> 
    Domain Object 
</div> 

$(function(){ 
    alert($(".myClass").data("domainObject").Name); 
}); 

例を経由して、それらを利用できるようにしますこのオプションが適していると、この(私はJSPの経験がないに注意してください)のようなものに見えるかもしれない要素にデータを追加する:

for(DomainObject domainObject : domainObjects){ 
//... 

     out.println("<div class='" + divClass + "' data-domainObject='" + jsonSerializer.exclude("class").serialize(domainObject)+ "'>"); 

     // Write out the details of this domain object. 
     out.println(/*...*/); 
     out.println("</div>"); 
//... 
    } 
+0

ああ私はこのオプションを前に見ました。私はそれがHTML5まで有効ではないことを考えれば良い考えであるかどうかは分かりませんでした。私はそれが本当に問題ではないと思う、私はそれを試してみるかもしれない。 –

関連する問題