Flex: переменная dataProvider с именем «result» создает проблемы.Зачем? - PullRequest
2 голосов
/ 02 февраля 2011
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            private var result : ArrayCollection = new ArrayCollection([1,2,3]);
        ]]>
    </mx:Script>

    <mx:List dataProvider="{result}"/>
</mx:Application>

У меня есть этот код.Проблема в том, что если моя переменная для dataProvider названа «result», то в запущенном приложении List содержит единственный элемент «[Binding Object]».Если я переименую «result» для чего-либо еще (например, «res»), список будет отображаться как положено - «1», «2», «3».Почему?

Ответы [ 2 ]

5 голосов
/ 02 февраля 2011

Краткий ответ: ЭТО ЖУЛЬТКА В FLEX. Я сообщил об этом.

Это странно ... Если мы используем элемент управления Spark List, он даже не скомпилируется. Это говорит нам, что он не может конвертировать Array в IList. result это, очевидно, переменная в каком-то месте, но где?

Итак, я посмотрел код, сгенерированный с использованием флага компилятора -keep-generate-actionscript = true.

Внутри файла ViewName-generate.as вы найдете интересный метод:

private function _ViewName_bindingsSetup():Array
{
    var result:Array = [];

    result[0] = new mx.binding.Binding(this,
        function():Object
        {

            return (result);
        },
        null,
        "_ViewName_List1.dataProvider"
        );


    return result;
}

Именно здесь объекты Binding превращаются в переменную result.

Мы можем видеть в объекте привязки, что есть функция, которая возвращает (result). В любом другом случае это будет что-то вроде (results). НО, в этом случае, он возвращает локальный массив Binding объектов. Вот почему this.result работает. Это вытаскивает из местного разума!

Итак, это явно ошибка. Я отправил его в Adobe в следующем формате: https://bugs.adobe.com/jira/browse/FB-29870

1 голос
/ 02 февраля 2011

Я просто экспериментирую со списками и массивами во Flex. Я пробовал this.result, все работало нормально. Я предполагаю, что результат может быть зарезервирован.

Rob

...