2007年07月16日
| ACCOUNT | NAME | ADDRESS | DATE |
|---|---|---|---|
| データ部をクリックすると更新フォームに反映します | |||
| {account} | {username} | {address} | {date} |
| {account} | {username} | {address} | {date} |
太字で書かれた部分がSpryに関するコードです。
Spryに関しては前回と変更はありません。»前回の解説
<divspry:region="dsUser"> <table> <caption>User List</caption> <thead> <tr> <th scope="col"spry:sort="account">ACCOUNT<th> <th scope="col"spry:sort="username">NAME</th> <th scope="col"spry:sort="address">ADDRESS</th> <th scope="col"spry:sort="date">DATE</th> </tr> </thead> <tfoot> <tr> <td colspan="4">データ部をクリックすると更新フォームに反映します</td> </tr> </tfoot> <tbodyspry:repeat="dsUser"spry:choose="choose"> <trspry:when="{ds_RowID}=={ds_CurrentRowID}" class="{ds_EvenOddRow}"spry:setrow="dsUser"spry:select="selected"> <td>{account}</td> <td>{username}</td> <td>{address}</td> <td>{date}</td> </tr> <trspry:default="default"class="{ds_EvenOddRow}"spry:setrow="dsUser"spry:select="selected"> <td>{account}</td> <td>{username}</td> <td>{address}</td> <td>{date}</td> </tr> </tbody> </table> </div> <divspry:detailregion="dsUser"class="detail clearfix"> <h3>Detail</h3> <form action="index.html" id="updateform" onsubmit="return false;"> <div spry:detailregion="dsUser"> <div> <lavel for="account">ACCOUNT<input type="text" name="account" id="account" value="{account}" /></label><br /> <label for="username">NAME<input type="text" name="username" id="username" value="{username}" /></label><br /> <label for="address">ADDRESS<input type="text" name="address" id="address" value="{address}" /></label><br /> <label for="date">DATE<input type="text" name="date" id="date" value="{date}" /></label><br /> </div> <div> <input type="button" value="INSERT" onclick="InsertRow();" /> <input type="button" value="UPDATE" onclick="UpdateRow();" /> <input type="button" value="DELETE" onclick="DeleteRow();" /> </div> </div> </form> </div>
<script type="text/javascript" src="includes/xpath.js"></script>
<script type="text/javascript" src="includes/SpryData.js"></script>
<script type="text/javascript">
<!--
var dsUser = new Spry.Data.XMLDataSet("spry_data.xml", "userinfo/user");
//-->
</script>
spryフレームワークのxpath.jsとSpryData.jsを読み込みます。
xpath.jsはspryフレームワークの中でもほとんどのライブラリで使用していますので、最初に記述しておきます。
その後、Spry.Data.XMLDataSet()を使ってxmlファイルと、その中で定義されているXMLのパスを指定します。
varInsertRow=function(){var frm=document.getElementById('updateform');var account=frm.elements['account'].value; var username=frm.elements['username'].value; var address=frm.elements['address'].value; var d=new Date(); var newDate=d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();var newLine=dsUser.data.length;dsUser.dataHash[newLine]=new Array();dsUser.setCurrentRow(newLine);var row=dsUser.getCurrentRow(); row["ds_RowID"]=newLine; row["account"]=account; row["username"]=username; row["address"]=address; row["date"]=newDate;dsUser.data[newLine]=dsUser.dataHash[newLine];Spry.Data.updateAllRegions();}; varUpdateRow=function(){ var frm=document.getElementById('updateform');var row=dsUser.getCurrentRow();row["account"]=frm.account.value; row["username"]=frm.username.value; row["address"]=frm.address.value; row["date"]=frm.date.value;Spry.Data.updateAllRegions();}; varDeleteRow=function(){var row=dsUser.getCurrentRow();var currentAccount=row.account;var FilterDelete=function(ds, row, rowNumber){ if(row.account==currentAccount){ return null; } row.ds_RowID=ds.data.length; return row; };dsUser.filterData(FilterDelete);Spry.Data.updateAllRegions();};
Insert、Update時のaccountの重複チェックはしていません。
解説は太字部分にマウスカーソルを当ててください
Insert部分のds_RowIDはSpry.Data.XMLDataSetが作成、使用しているプロパティです。
設定しなくても動きますが、filterやsortなどに影響が出るかもしれません。
<?xml version="1.0" encoding="utf-8"?> <userinfo> <user> <account>guest</account> <username>guest_name</username> <address>address_a</address> <date>2004-02-12 21:05:1</date> </user> <user> <account>water</account> <eusername>water_name</username> <address>address_b</address> <date>2006-01-10 20:02:36</date> </user> <user> <account>light</account> <eusername>light_name</username> <address>address_c</address> <date>2006-08-6 03:03:27</date> </user> <user> <account>wind</account> <eusername>wind_name</username> <address>address_d</address> <date>2006-06-30 16:54:56</date> </user> <user> <account>stone</account> <eusername>stone_name</username> <address>address_e</address> <date>2005-02-24 11:56:11</date> </user> <user> <account>fire</account> <eusername>fire_name</username> <address>address_f</address> <date>2005-01-04 02:06:15</date> </user> </userinfo>
.even{
background-color: #ffffff;
}
.odd{
background-color: #cccccc;
}
.selected{
background-color: #ffcccc;
}