任务单 #9466

divHtmlをレイアウト部品のように使いたい
开放日期: 2006-11-22 11:25 最后更新: 2007-02-01 13:55

报告人:
属主:
状态:
关闭
组件:
(无)
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
文件:

Details

divHtmlを他の部品と同じように名前をつけたり位置やサイ
ズを指定したり、
値(htmlソース)を変えたり出来るようにしていただけませ
んでしょうか?

任务单历史 (3/10 Histories)

2006-11-28 17:18 Updated by: ochida
评论
Logged In: YES
user_id=24731

ども。
丁度同じような事がしたかったので、
ちょっと試してみました。

■拡張widgetの作成
core/ext/maskat以下にdivHtmlEx.jsを以下で作成します。
~~~~~ここから
maskat.widget={};

maskat.widget.DivHtml=function
(name,top,left,parent,element,className,objPar){
var objParam=new Object;
objParam.name=name;
objParam.type="divHtml";
objParam.left=left;
objParam.top=top;
if(objPar!=null){objParam.position=objPar.position;}
this.base=rialto.widget.AbstractComponent;
this.base(objParam);
objPar=null;
objParam=null;
this.element=element;
if(className!=''&&className!=null){
this.className=className;
}else{
this.className="libNormal";
}
var oThis=this;
this.divExt.id=this.id+"_DivGen";
this.divExt.style.position=this.position;
this.divExt.style.left=this.left+"px";
this.divExt.style.top=this.top+"px";
this.divExt.className=this.className;
this.divExt.innerHTML=this.element;
if(parent){this.placeIn(parent);};
}
maskat.widget.DivHtml.prototype=new
rialto.widget.AbstractComponent;
maskat.widget.DivHtml.prototype.setElement=function(element)
{
this.element=element;
this.divExt.innerHTML=this.element;
}
~~~ここまで

■layoutXMLInterpreter.jsの修正
core/layoutXMLInterpreter.jsに以下の修正を加えます。
①syntaxの追加(220行目辺り)
 以下を追記
divHtml: {
name: {type: "string"},
top: {type: "number"},
left: {type: "number"},
parent: {type: "object"},
className: {type: "string"},
position: {type: "enum", elem:
["static", "relative", "absolute"]}
},
②処理の修正(1440行目あたり)
 メソッド内をすべて修正
maskat.transDivHtmlTag = function(pathObjArray, domElem){
var output = "";
var attr = {};

//// 属性の取得
maskat.receiveAttributes(domElem, attr);

// "<rialto:divHtml><![CDATA[...]]
></rialto:divHtml>"の"..."の部分を取得する
var cdataValue = "";
if (domElem.hasChildNodes()){
for (var i = 0; i < domElem.childNodes.length; i++){
if (domElem.childNodes[i].nodeType == 4){ //
CDATA_SECTION
cdataValue += domElem.childNodes[i].nodeValue;
}
}
}
if (cdataValue != ""){
// cdataValueに改行が含まれると、3行下のinnerHTMLの文字
列を作成した際に文字列が不正になるので、改行を取り除く
cdataValue = maskat.removeNewLine(cdataValue);
}

//// 前変換

// pathObjArrayの要素を降順に走査し、isContainerプロパティ
がtrue
// のオブジェクトのgetRefObjメソッドの戻り値を取得する
var refObjName;
for (var i = pathObjArray.length - 1; i >= 0; i--){
if (pathObjArray[i].isContainer){
refObjName = pathObjArray[i].getRefObj();
break;
}
}

attr["parent"] = refObjName;

var strObjPar = maskat.composeParam(domElem, attr);

output += attr.name + " = new maskat.widget.DivHtml("
+ maskat.composeSingleParam(domElem,
attr, "name") + ", "
+ maskat.composeSingleParam(domElem,
attr, "top") + ", "
+ maskat.composeSingleParam(domElem,
attr, "left") + ", "
+ maskat.composeSingleParam(domElem,
attr, "parent") + ", "
+ "'" + cdataValue + "', "
+ maskat.composeSingleParam(domElem,
attr, "className") + ", "
+ strObjPar + ");\n";

//// 子供の処理

//// 後変換

return output;

}

■objWrapper.jsの修正
①ObjWrapper.prototype.isSingleDataObjの修正(50行目辺り)
 以下の1行を追記
switch (this.obj.type){ // [RialtoAPI依存]
case "label":
case "text":
case "combo":
case "checkbox":
case "radioGroup":
case "codelib":
case "divHtml": // ←追加
return true;
default:
return false;
}
②ObjWrapper.prototype.setSingleValueの修正(146行目あたり)
 以下を追記
case "divHtml":
this.obj.setElement(val);
break;

修正は以上になります。
使用方法は、以下の通りです。
■初期HTMLの追記
上記で作成したjsファイルをインポートします。
<script type="text/javascript"
src="core/ext/maskat/divHtmlEx.js"></script>

■レイアウトXMLの設定
基本的にlabelタグと同じ属性が設定可能です。
<使用例>
<divHtml name="myDivHtml" left="20" top="20">
<![CDATA[<h2>タイトル</h2><p>これは<b>HTMLテキスト</b>で
す。</p>]]>
</divHtml>

■イベント定義XMLの設定
要素を電文から受信可能です。
<設定例>
<result rootNode="result">
<target out="myDivHtml" in="divElement"/>
</result>

<受信電文例>
<?xml version="1.0" encoding="UTF-8"?>
<result><divElement>
<![CDATA[<h2>タイトル更新</h2><p>これは<I>HTMLテキスト</I>で
す。</p>]]>
</divElement></result>

簡単なので、ぜひお試し下さい。
2006-11-29 12:27 Updated by: ey2ngpee
评论
Logged In: YES
user_id=25170

素晴らしいです。
ochidaさんの様なパワーユーザーがいるととても頼もしいです。
今後ともよろしくお願いします。

ところで、一歩進むと人間二歩三歩進みたくなるもので、新たな
欲が出てきました。
divHtmlにスクロールバーは付けられないでしょうか?
サイズを固定して、その範囲内だけで表示したいのです。

それから、今の開発環境(Eclipse)ではMaskat Text Editorでせっ
かく位置を指定しても
Maskat Editorで部品の編集などをするとレイアウトXMLの中の位
置情報が消えてしまいます。
回避策などはありますでしょうか?
2006-11-29 13:31 Updated by: ochida
评论
Logged In: YES
user_id=24731

ども。
ochidaです。

>divHtmlにスクロールバーは付けられないでしょうか?
>サイズを固定して、その範囲内だけで表示したいのです。
この部分ですけど、
divHtmlをformで囲むっていうのは如何でしょうか?
<こんな感じ>
<frame name="myFrame" left="0" top="0" width="100"
height='100' title="フレーム"
draggable="true" dynamic="true" >
<divHtml name="myDivHtml" left="0"
top="0" className="white-space:nowrap;">
<![CDATA[<h2>タイトル</h2><p>こ
れは<b>HTMLテキスト</b>です。</p>]]>
</divHtml>
</frame>

これで、divHtmlにはスクロールバーは付いてませんが、
フレームの方にスクロールバーが付きます。

※但し昨日のdivHtmlEx.jsに以下の一行(29行目)が追加になりま
す。
this.divExt.style.whiteSpace="nowrap";


ちょっと逃げ的な意見ですが、
これで機能が実現できれば幸いです。
2006-11-29 14:13 Updated by: ey2ngpee
评论
Logged In: YES
user_id=25170

ありがとうございます。
縦スクロールだけを考えていたのですが、フレームを使うと横ス
クロールも出来るんですね。
縦スクロールだけをさせたい場合はdivHtmlにwidth属性を持たせ
るようにして
> this.divExt.style.whiteSpace="nowrap";
を追加せずに使えばいいのでしょうか?
2006-11-29 14:58 Updated by: ochida
评论
Logged In: YES
user_id=24731

divHtmlの要素の内容にもよりますが、
内容が、テキスト文字のみ(サンプルどおり)であれば、
追加部分を追加しなければ、
自動で、文字が改行され、
縦スクロールバーのみになります。

divHtmlにwidth属性は、
持たせていないので、タグで指定すると
怒られてしまうと思います。

2006-11-30 15:48 Updated by: shsalex
评论
Logged In: YES
user_id=23740

ey2ngpeeさん、どうも。
「Maskat Editorで編集するとレイアウトXMLの中の位置情報が消え
てしまう」について、問題発生の経緯を詳しく説明してくれませんか?
2006-11-30 15:58 Updated by: ey2ngpee
评论
Logged In: YES
user_id=25170

Maskat Text Editorで、***.xml(レイアウト定義XML)を例えば

<divHtml name="myDivHtml" top="100" left="100"><!
[CDATA[<h2>sample text</h2>]]></divHtml>

などと書いて、
今度は***.xmlをMaskat Editorで開いて、何らかの編集(ラベル
を追加してそれを削除するなど)を行って保存すると、
MaskatText Editorに戻って***.xmlを見ると

<divHtml><![CDATA[<h2>sample text</h2>]]
></divHtml>

に書き換わるという現象です。確認できますでしょうか?
2006-11-30 18:37 Updated by: nakahk
  • Ticket Close date is changed to 2006-11-30 18:37
  • 属主 Update from (无) to ochida
  • 状态 Update from 开启 to 关闭
2006-12-01 13:16 Updated by: shsalex
  • 状态 Update from 关闭 to 开启
2007-02-01 13:55 Updated by: nakahk
  • Ticket Close date is changed to 2007-02-01 13:55
  • 状态 Update from 开启 to 关闭
评论
Logged In: YES
user_id=23005

ey2ngpeeさん、レスポンスが遅れ申し訳ございません。
下記の件について現在の最新バージョン1.4.0にて確かめたところ
書き換わる現象は確認されませんでした。

下記の現象が起きた理由として、
Maskat Text Editor編集時に保存を行わなかった、または、
古い情報をMaskat Editorで編集し上書きしたなどにより、
正確にレイアウト定義XMLとイベント定義XMLの同期が
取れなかった可能性が考えられます。

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名