[Flex]Drag&Drop は俺じゃないかもしれない

[Flex]Drag&Drop は俺にきいてもわからなかったね
[Flex]Drag&Drop は俺にきいてもわからないかもしれない
[Flex]Drag&Dropは俺にきいてくれ

たびたび、ListのDrag&Dropについて書いてきたが、実はまだ悩んでいたのだ。あるListではドラック&ドロップをすると、スクロールバーが一番上に勝手に移動してしまう。でも、大丈夫なListは大丈夫。まったく同じ構成のハンドラを実装していたのに。。。orz しかし、明確な答えがみつかったのだ。原因はdataProviderだ!!!

Flexは便利。こんな風に書いとけば、リストのアイテムをバインドしてくれる。

<PlaylistSelector id="playlistSelector" dataProvider="{_workspace}" />

でも、このdataProviderを書くと、自動でいろいろやってくれるが、余計なこともしてくれる。さっき、スクロールバーが動いちゃうListと大丈夫なListがある、って書いたけど、違いはdataProviderがmxmlに書いてあるかどうか、だったのだ。

mxmlのほうにdataProviderを書くとデータバインディングが行われるけど、これのせいで、上記の例だとworkspaceに変化があるとリストがリセットされてしまうんじゃないのかな。大丈夫な方は、データバインディングでは書いてなくて、as3のメソッドで定義している。

  playlistSelector.dataProvider = _workspace;

こうすると、データバインディングの機構は動作せずに、たんにデータプロバイダを_workspaceに設定するだけになる。もちろん、これだけでもデータに変更が起こればビューは自動的に更新されるから用は足りそうです。ということで、用途にもよると思いますが、ListのdataProviderはmxmlで書かないこと!これがいいようだ。

コメント

タイトルとURLをコピーしました