#apache-flex #actionscript-3 #data-binding
#apache-flex #actionscript-3 #привязка данных
Вопрос:
Я нашел другой похожий вопрос, но не совсем следую приведенному там объяснению и не уверен, применимо ли оно ко мне.
Я получаю ошибку:
предупреждение: не удается привязать к свойству ‘Description’ в классе ‘Object’ (класс не является IEventDispatcher)
однако это происходит только тогда, когда данные привязаны к списку в виде ArrayList. Раньше он был у меня в Datagrid (просто как массив), и это не вызвало никаких проблем. Я не ожидаю, что смогу привязать какие-либо данные обратно к классу ‘object’, даже не уверен, к какому именно объекту это относится.
Мой поставщик данных списка — ArrayList.. заполняется результирующим событием из SQL-запроса, содержащегося в другом классе:
private function loadDayComplete():void
{
var Meals:Array = _day.MealResults;
var MealsListResult:ArrayList = new ArrayList(Meals);
MealPanelDataGrid.dataProvider = Meals;
MealListView.dataProvider = MealsListResu<
{
Класс day, который у меня есть, является держателем данных для получения всех данных (из нескольких таблиц) за 24-часовой промежуток.. У меня есть классы для каждого отдельного типа данных для их редактирования.
Но я не уверен, нужно ли мне вообще беспокоиться о предупреждении, если я не планирую редактировать значения? он полностью рассылает спам на консоль, хотя всякий раз, когда я к чему-либо прикасаюсь, поэтому я действительно хотел бы избавиться от него.
Я попробовал объектный прокси, как я видел, описанный в другом месте, но ничего не изменилось. И я довольно смущен, почему это внезапно стало проблемой в компоненте списка, когда этого не было в datagrid… Текст в любом случае сейчас находится в полях меток, которые даже не могут быть отредактированы.
Ответ №1:
Объекты, вызывающие это предупреждение, вероятно, являются элементами внутри Meals
массива. Убедитесь, что эти элементы строго типизированы (шаблоны объектов передачи данных / объектов значений) и что Description
поле помечено [Bindable]
.
В зависимости от используемого вами механизма удаленного взаимодействия вы можете использовать что-то вроде флага makeObjectsBindable, который заменяет возвращаемые Object
элементы на привязываемые ObjectProxy
экземпляры.
Но я все равно посоветую строгий ввод.
Комментарии:
1. Я добавил [Bindable] ко всем переменным во всех создаваемых классах (их было 2), и теперь это работает! отлично.
2. ObjectProxy удобен для быстрых решений. Но я согласен с Иво Банасом в том, что вам следует отдавать предпочтение строго типизированным объектам с правильными связываемыми свойствами — если вы это сделаете, то получите хорошую поддержку компилятора. Я бы также рекомендовал для повышения производительности не использовать общий тег [Binding], а вместо этого использовать шаблон [Binding(«customChangeEvent»)]. Это снижает «штормы» событий привязки, влияющих на производительность, позволяя компилятору узко фокусировать прослушиватели событий. По этой причине вы видите это во всем собственном коде Adobe.
Ответ №2:
Вы можете избавиться от него, создав свой dataProvider
an EventDispatcher
: ObjectProxy
is EventDispatcher
. Он автоматически перенесет ваши данные на заданную или бесконечную глубину (поведение по умолчанию).
metaPanelDataGrid.dataProvider = new ObjectProxy(meals);
Это в основном то же самое, что и с ArrayCollection
, но глубже.