- - PR -
Dojoの編集
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-04 11:35
こんいちは。
struts2とDojo0.4.3で画面とデータのやり取りを行いたいのですが、Dojoの文献が少なく、どのようにカスタマイズしてよいのか分かりません。 DojoのzipファイルをDLすると多くのサンプルがあるのですが、独自すぎてどう読んでよいのかも分かりません。 今、サンプルの中にTitlePaneと言うのを利用した画面レイアウトに挑戦しています。 ■sample.html <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>HTML Effects</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> div.TitlePane { padding: 0px; margin: 0px; } div.TitlePane.label { background: #999999; font-size: 16px; color: #ffffff; height: 20px; border: 1px solid black; width:250px; } div.TitlePane.content { background: #eeeeee; border-left: 1px solid black; border-right: 1px solid black; width:250px; } div.TitlePane.innerLabel { background: #eeeeee; font-size: 15px; color: #ffffff; height: 20px; border-bottom: 1px solid black; width: 250px; } div.TitlePane.innerContent { width: 250px; border-bottom: 1px solid black; } </style> <script type="text/javascript" src="dojo/dojo.js"></script> <script language="JavaScript" type="text/javascript"> dojo.require("dojo.widget.TitlePane"); dojo.hostenv.writeIncludes(); </script> </head> <body> <div dojoType="TitlePane" label="Sample" labelNodeClass="label" containerNodeClass="content" open="false"> <div dojoType="TitlePane" label="Sample1" labelNodeClass="innerLabel" containerNodeClass="innerContent" href="other/doc0.html" open="false"></div> <div dojoType="TitlePane" label="Sample2" labelNodeClass="innerLabel" containerNodeClass="innerContent" href="other/doc0.html" open="false"></div> </div> </body> </html> ■デフォルトにあるTitlePane.js dojo.provide("dojo.widget.TitlePane"); dojo.require("dojo.widget.*"); dojo.require("dojo.widget.ContentPane"); dojo.require("dojo.html.style"); dojo.require("dojo.lfx.*"); dojo.widget.defineWidget("dojo.widget.TitlePane", dojo.widget.ContentPane, {labelNodeClass:"", containerNodeClass:"", label:"", open:true, templateString:"<div dojoAttachPoint=\"domNode\">\n<div dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick: onLabelClick\"></div>\n<div dojoAttachPoint=\"containerNode\"></div>\n</div>\n", postCreate:function () { if (this.label) { this.labelNode.appendChild(document.createTextNode(this.label)); } if (this.labelNodeClass) { dojo.html.addClass(this.labelNode, this.labelNodeClass); } if (this.containerNodeClass) { dojo.html.addClass(this.containerNode, this.containerNodeClass); } if (!this.open) { dojo.html.hide(this.containerNode); } dojo.widget.TitlePane.superclass.postCreate.apply(this, arguments); }, onLabelClick:function () { if (this.open) { dojo.lfx.wipeOut(this.containerNode, 250).play(); this.open = false; } else { //@ここ dojo.lfx.wipeIn(this.containerNode, 250).play(); this.open = true; } }, setLabel:function (label) { this.labelNode.innerHTML = label; }}); 動作としては、dojoType="TitlePane"のバーをクリックした時に同じ<div>タグにある内容を表示・非表示にするというものですが、これをlabelNodeClass="innerLabel"の時は他のものは閉じると言うロジックに修正したいと思ってます(現状全て開きっぱなし)。 「@ここ」と表示された箇所が追記する箇所なんですが、そもそもどのように他の値が取れるのか分からず・・。 お分かりになる方ございましたら、よろしくお願いします。 (Dojoの日本語版リファレンスも紹介いただけたら幸いです。) もうひとつお聞きしたいのが、prototype.js、jQueryなどはある程度クロスブラウザを意識していますが、このDojoは意識しているのでしょうか?FireFox3でほとんど実行されません。 | ||||
|
投稿日時: 2008-09-04 13:44
どじょチュートリアル:
http://journal.mycom.co.jp/special/2008/dojo/002.html 以下、IE6 で実行すると、下の方に dojoType が確認できます。 残念ですが、Firefox で実行すると dojoType が見えません。 <削除>もしかしたら、取る方法があるのかもしれませんが、 documentElement.innerHTML から 解析すれば取れそうだけど、めんどくさそう。</削除> 追記:getAttribute("dojoType") で普通に取れるんですね;;
追記:ということで、IE でも Firefox でも問題無いんじゃないかと。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-09-04 14:56 ] | ||||
|
投稿日時: 2008-09-04 16:18
ありがとうございます。
紹介いただいたサイト(貴重ですねありがとうございます)を見るとdojo.byId();での取得が紹介されてました。 教えていただいたdocument.getElementByIdですが、これってFireFoxはダメではなかったでしたっけ??下記サンプルコードからこのようにしてみました(document.getElementByIdでもやりましたがダメでした)。 ■html部 <div dojoType="TitlePane" label="Sample" labelNodeClass="label" containerNodeClass="content" open="false"> <div dojoType="TitlePane" label="Sample1" labelNodeClass="innerLabel" containerNodeClass="innerContent" href="other/qrcode.html" open="false" id="child1"></div> <div dojoType="TitlePane" label="Sample2" labelNodeClass="innerLabel" containerNodeClass="innerContent" href="other/qrcode.html" open="false" id="child1"></div> </div> ■js部(前述部抜粋) }, onLabelClick:function () { var o = dojo.byId("child1"); for (var a in o) { alert(o[a]); } if (this.open) { dojo.lfx.wipeOut(this.containerNode, 10).play(); this.open = false; } else { dojo.lfx.wipeIn(this.containerNode, 10).play(); this.open = true; } このようにテストしてみましたが、未だ取れない状態です(IE6)・・。 |
1