我创建了一个带有自定义treeitemrenderer的树,我在每个标签旁边添加了一个textinput框。我的数据提供者是ArrayCollection
。
当我在输入框中输入值时,我可以看到该值很好,因为我使用显示箭头展开或折叠树。当我尝试使用以下代码单击按钮以展开和折叠树时,尝试从mxml
页面展开和折叠树时,会出现一个奇怪的问题。
问题是当我展开或折叠树时,我在输入框中输入的值似乎在移动。
例如,我在输入框1中输入了15。当我展开并折叠树时,15移动到另一个输入框,然后移动到另一个输入框,然后它移回到输入的位置,因为我一直在扩展和折叠那个树。我还在学习Flex。我不确定发生了什么,这与arraycollection
有关。
非常感谢任何帮助。谢谢。
private function expandTree():void{
for (var i:int = 0; i < thisTree.dataProvider.length; i ++){
thisTree.expandChildrenOf(thisTree.dataProvider[i], true)
}
}
private function collapseTree():void{
for (var i:int = 0; i < thisTree.dataProvider.length; i ++){
thisTree.expandChildrenOf(thisTree.dataProvider[i], false)
}
}
答案 0 :(得分:2)
Flex项目渲染器被回收,这就是导致您的数据像这样走路的原因。在项呈示器中,我通常发现将数据转换为可绑定值对象并覆盖数据的setter非常有用。
[Bindable]
private var myBindableValueObject:MyBindableValueObject;
override public function set data(v:Object):void
{
if(v == data)
return;
myBindableValueObject = v as MyBindableValueObject;
super.data = value;
validateNow();
}
您需要将文本输入和标签的属性绑定到值对象中的值。这将确保在适当的位置显示正确的值。使用这种方法可以消除您遇到的奇怪现象。
答案 1 :(得分:0)
我按照你的建议尝试过,但我没有看到任何变化。不确定我能否按照你的建议。这是代码。感谢。
package
{
import mx.collections.*;
import mx.controls.Label;
import mx.controls.TextInput;
import mx.controls.listClasses.*;
import mx.controls.treeClasses.*;
[Bindable]
public class TestSetupTreeItemRenderer extends TreeItemRenderer {
[Bindable]
public var _numQuestion:TextInput;
private var _numOfQuestionText:Label;
private var _listData:TreeListData;
[Bindable]
public var tItem:TestSetupTreeItem;
public function TestSetupTreeItemRenderer():void {
super();
mouseEnabled = false;
}
override protected function createChildren():void {
super.createChildren();
_numQuestion = new TextInput();
_numQuestion.text = "0"; //default
_numQuestion.width = 45;
_numQuestion.height = 20;
_numQuestion.restrict = "0123456789";
addChild(_numQuestion);
_numOfQuestionText = new Label();
_numOfQuestionText.width = 60;
_numOfQuestionText.height = 22;
addChild(_numOfQuestionText);
}
override public function set data(value:Object):void {
if(value == data)
return;
tItem= value as TestSetupTreeItem;
super.data = value;
validateNow();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth,unscaledHeight);
if(super.data){
tItem = super.data as TestSetupTreeItem;
this.label.width = 150;
this.label.truncateToFit(null);
this.label.multiline = true;
this.label.wordWrap = true;
var tld:TreeListData = TreeListData(super.listData);
this._numOfQuestionText.text = "of " + tItem.totalQuestionCount;
this._numOfQuestionText.x = 300;
this._numOfQuestionText.y = super.label.y;
this._numQuestion.x = 200;
this._numQuestion.y = super.label.y;
this._numQuestion.editable = true;
tItem.desiredQuestionCount = this._numQuestion.text;
}
}
}
}