qx.ui.embed.GalleryListの選択時にアイテムのインデックスを取得する

…方法は、ちょっと簡単にはいかない感じ…

GalleryListが、qx.ui.basic.Terminatorの派生クラスで、アイテム自体はdiv要素を並べているだけなのでインデックスとか取れないようだ。

とりあえず試行錯誤の記録。最終的には、numberプロパティとして設定した#01とかの文字をDOM要素から抜き出して判断するという、微妙な対応に。

var galleryList = new qx.ui.embed.GalleryList(galleryData);
galleryList.getManager().addEventListener("changeSelection", function(e) {
  alert(e.getData()); // DIV
  alert(e.getTarget()); // DomSelectionManager
  alert(e.getTarget().getItemHashCode( e.getTarget().getSelectedItem() )); // 550
  alert(e.getTarget().getSelectedItem().firstChild); // DIV
  alert(e.getTarget().getSelectedItem().firstChild.innerHTML); // #01
  alert(e.getTarget().getSelectedItem().childNodes[0].firstChild.nodeValue); // #01
  var num = Number( e.getTarget().getSelectedItem().childNodes[0].firstChild.nodeValue.match(/#0?([0-9]+)/i)[1] );
  …
});

うーむ、使いにくい。
VerticalLayoutに自分でオブジェクト突っ込んでいった方が楽かも…

マネージャにqx.manager.selection.DomSelectionManagerクラスが指定されているので、getItems()でdivリスト取得して、上から順にisEqual(var vItem1, var vItem2)とかした方が確実だとは思う。
遅いと思うけど。

ちなみに、リストの並べ替えもGalleryListでやろうとして地獄を見た。


新しく会社作りました!

コメントをどうぞ