Webアプリを開発中で、ブラウザ側はdojoを使っているのですが、色々とハマっております。現在最も困っているのがdojox.grid.DataGridに埋め込んだdijit.form.Buttonの挙動。
dojox.grid.DataGridがなかなか強力で、これが使いたいためにdojoを選んだわけですが、このgridの各行にbuttonを配置すると途端に挙動が怪しくなってきます。
(1)ボタン文言をasciiにすると見た目が装飾されない。
表題の通りだけど、文章からは現象が伝わりづらい。次の画像をみるとわかりやすい。
ascii
not ascii
同じタグ構造で、上はボタンの文言が「test」、下は「テスト」。この違いだけで見た目がこのように変わる。 どちらも画像左上に「test」ボタンがあるが、このようにgridの外であればこの現象は起きない。わけがわからん。
追記:
gridのformatterで<button data-dojo-type=”dijit.form.Button”>test</button> とやるとおかしくなるが、ボタンが1個だけでよければ
formatter: function(value, index){
return new dijit.form.Button({
label: "test"
});
}
とやればasciiでも期待通りになる模様。ボタン2個のときはどうしたらいいのだろう…
(2)gridの中に入れたdijit.form.Buttonをクリックすると、外のwidgetにイベントが伝播する。
これまた意味不明な挙動なのだが、次のようなタグ構造があるとする。
<div data-dojo-type="dijit.Dialog">
<form id="frm" data-dojo-type="dijit.form.Form">
<div data-dojo-type="dijit.layout.BorderContainer">
<div data-dojo-type="dijit.layout.ContentPane">
<div id="grid" data-dojo-type="dojox.grid.DataGrid"></div>
</div>
<div data-dojo-type="dijit.layout.ContentPane">
<button data-dojo-type="dijit.form.Button">ボタンA</button>
</div>
</div>
</form>
</div>
このとき「ボタンA」をクリックする分にはそのボタンのonClickが動くだけなのだが、gridの中にボタンを配置しそれをクリックすると、そのボタンのonClickが実行された後にfrmがsubmitされてしまう。
とりあえずfrmのonSubmitにfunction(){ return false; }を入れて回避しているが、普通にsubmitさせたいformの場合は困ってしまうだろう。
gridに絡まない部分ではクセさえ掴めば割といい感じなのだが、(といってもdijit.formにほしいwidgetがないとが色々あるけど)、gridとdijit.formを組み合わせるとイマイチなのかもしれない。
-
takemasa5の投稿です