DataGridとパスワードをつかうためのサンプル
パスワードのマスキングとか
itemRendererにTextInput指定して、displayAsPasswordとかすれば楽っぽいんですけどitemEditorを使う方法で...。
- labelFunctionのマスキング用の関数を指定
- itemEditorにPasswordEditor.mxmlみたいなコンポーネントを指定してあげること。TextInputのdisplayAsPassword="true"は必須で
はまりどころしては、PasswordEditor.mxmlなどでtextプロパティなどで値をセットしておかないと、いつの間にか値そのものが"*****"になってしまう点。ソースコードは、昨日のhttp://d.hatena.ne.jp/shogo4405/20090510/1241957645のソースに追加
PasswordEditor.mxml
<?xml version="1.0"?> <mx:TextInput displayAsPassword="true" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:creationComplete> <![CDATA[ text = data.name; ]]> </mx:creationComplete> </mx:TextInput>
Main.mxml
<?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"> <mx:Script> <![CDATA[ import mx.controls.*; import mx.collections.*; import mx.controls.dataGridClasses.DataGridColumn; public function getSexname(item:Object, column:DataGridColumn):String { var type:Number = item.sex; return (type == 0) ? "女性" : "男性"; }; // マスキング用の関数 public function masking(item:Object, column:DataGridColumn):String{ return new Array(item.name.length + 1).join("*"); }; public function debug():void { trace(list.getItemAt(0).sex); trace(list.getItemAt(0).name); }; [Bindable] public var list:ArrayCollection = new ArrayCollection( [ { no:1, name:"Taro", sex: 1 }, { no:2, name:"Hanako", name:"Hanako", sex: 0 } ] ); ]]> </mx:Script> <mx:DataGrid width="100%" height="100%" dataProvider="{list}" editable="true"> <mx:columns> <mx:DataGridColumn dataField="no" editable="false" /> <mx:DataGridColumn dataField="name" labelFunction="{masking}" itemEditor="PasswordEditor" /> <mx:DataGridColumn dataField="sex" labelFunction="{getSexname}" editorDataField="value" itemEditor="SexEditor" /> </mx:columns> </mx:DataGrid> <mx:Button click="debug();" /> </mx:Application>
そもそも
そもそもDataGridでパスワード編集させる仕様にするなよ!っていう突っ込みは無です。