Гибкое дерево разворачивается и разворачивается - PullRequest
2 голосов
/ 12 октября 2009

Я создал дерево с настраиваемым средством просмотра дерева, в которое я добавил текстовое поле ввода рядом с каждой меткой. Мой поставщик данных ArrayCollection.

Когда я ввожу значение в поле ввода, я вижу точное значение, когда я раскрываю или сворачиваю дерево, используя стрелку дислоцирования. Есть странная проблема, когда я пытаюсь развернуть и свернуть дерево со страницы mxml одним нажатием кнопки, чтобы развернуть и свернуть дерево, используя следующий код.

Проблема в том, что, когда я раскрываю или сворачиваю дерево, значения, введенные в поля ввода, кажутся движущимися.

Например, я ввел 15 в поле ввода 1. Когда я раскрываю и сворачиваю дерево, 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) 
  } 
} 

Ответы [ 2 ]

2 голосов
/ 12 октября 2009

Средства визуализации элементов Flex перерабатываются, и именно поэтому ваши данные перемещаются таким образом. В вашем средстве визуализации элементов я нахожу полезным преобразовать ваши данные в объект привязываемого значения и переопределить установщик для данных.

[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();
}

Вам нужно будет привязать свойства ввода текста и метки к значениям в объекте значения. Это обеспечит отображение правильных значений в соответствующем месте. Использование этого подхода должно устранить возникающие у вас странности.

0 голосов
/ 12 октября 2009

Я пытался, как вы предложили, но я не вижу никаких изменений. Не уверен, что смог последовать вашему предложению. Вот код Спасибо.

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;
            }          
        } 
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...