SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

XML Binding Language 2.0でアプリケーションを簡素化する

レイアウトとコードの簡素化に役立つバインディング言語としてのXML

 TwitterバインディングのXBLドキュメント全体は、Twitter.xmlに含まれています(リスト3を参照)。

リスト3
<?xml version="1.0" encoding="UTF-8"?>
<xbl xmlns="http://www.w3.org/ns/xbl">
   <binding id="twitter">
       <implementation><![CDATA[
           ({
           xblBindingAttached: function() {
             boundElement = this;

             this.shadowTree.getElementById('feedbutton').addEventListener('click', this.getFeed, false);
             this.boundElement = this;
             //var buf = [];for (var prop in this.shadowTree){buf.push(prop);}
             //alert(buf.join(', '));
             frame = this.shadowTree.getAttribute('frame');
           },
           boundElement:null,
           frame:"",
           targetIFrame:function(src){
               alert(src);
               },
           getFeed: function(){
               var shadowTree = boundElement.shadowTree;
               var internal = shadowTree.getElementById("internal");
               var username = shadowTree.getElementById("username").value;
               var password = shadowTree.getElementById("password").value;
               var http = new XMLHttpRequest();
               setTimeout(boundElement.getFeed,60000);
               // Note - you're passing password via cleartext here, something stronger recommended
               var url = "twitter.xq?username="+username+"&password="+password;
               http.open("GET",url,true);
               http.onreadystatechange = function() {
                   if (http.readyState == 4){
                       internal.innerHTML = '';
                       var tweets = eval(http.responseText);
                       for (tweetCt in tweets) {
                           var buf = [];
                           var tweet = tweets[tweetCt];
                           var text = tweet.text;
                           text = text.replace('&'," and ");
                           text = text.replace(/(http:\/\/\S+).*/,'<a href="$1" target="__frame__">$1</a>');
                           text = text.replace("__frame__",frame);
                           if (shadowTree.getElementById("id")==null){
                               buf.push("<tr class='tweet_row' id='"+tweet.id+"'>");
                               buf.push("<td class='tweet_cell'><img src='"+tweet.user.profile_image_url+"' width='48' height='48'/></td>");
                               buf.push("<td class='tweet_cell'><b>"+tweet.user.name+":</b> "+text+"</td>");
                               buf.push("</tr>");
                               var output = buf.join("");
                               internal.innerHTML = output + internal.innerHTML;
                               }
                           }
                       }
                   };
               http.send(null);
               }
           })
       ]]></implementation>
       <template>
           <table>
               <tr>
                   <td>
                       <table id="controller">
                           <tr>
                               <th>User Name:</th>
                               <th colspan="2">Password:</th>
                           </tr>
                           <tr>
                               <td>
                                   <input type="text" id="username" style="width:150px;" value="kurt_cagle"/>
                               </td>
                               <td>
                                   <input type="password" id="password" style="width:150px;" value="mermaid"/>
                               </td>
                               <td>
                                   <input type="button" id="feedbutton" value="Retrieve"/>
                               </td>
                           </tr>
                       </table>
                       <div id="container">
                           <table id="internal"/>
                       </div>
                   </td>
               </tr>
           </table>
       </template>
       <!--        <handlers></handlers> -->
       <resources>
           <style><![CDATA[
               td.tweet_cell {
                   background-color:#E0E0FF;
                   border:outset 2px;
                   font-family:Arial;
                   font-size:9pt;}
               #container {overflow-y:auto;
                   display:block;
                   width:400px;
                   height:500px;}
               ]]></style>
       </resources>
   </binding>
</xbl>

次のページ
データストリームの生成

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Kurt Cagle(Kurt Cagle)

ライター、情報アーキテクト、XML News NetworkとMetaphorical Webのウェブマスター。カナダ、ブリティッシュコロンビア州のビクトリア在住。XMLToday.orgの編集長、O'Reilly Mediaの寄稿編集者。現在、XBRLに関する著書を執筆中。彼のTwitterはtw...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4907 2010/03/01 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー