Я новичок в Flex (получил назначение для поддержки старого проекта на работе), и у меня возникают проблемы с правильной работой привязки данных. У меня есть popup form class, AddOffer.mxml, который использует модель AddOfferModel.as. На моей всплывающей форме, у меня есть следующий компонент:Связывание данных по нескольким объектам в Flex 3
<mx:FormItem label="{getResource('addOffer.form.OFFER_DATE')}:"
labelWidth="90">
<views:OfferWindowDatesFragment
id="offerWindowField"
start="{model.offerStartDate}"
stop="{model.offerStopDate}" />
</mx:FormItem>
Мой файл AddForm.mxml также имеет некоторые встроенные ActionScript, где я определяю свою «модель» переменной:
[Bindable]
public var model:AddOfferModel;
переменных модели я пытаюсь для привязки являются стандартными геттеры/сеттеры и выглядеть следующим образом внутри AddOfferModel.as:
[Bindable]
public function set offerStartDate(val:EditableInstant):void
{
_offerStartDate = val;
}
public function get offerStartDate():EditableInstant
{
return _offerStartDate;
}
private var _offerStartDate:EditableInstant;
[Bindable]
public function set offerStopDate(val:EditableInstant):void
{
_offerStopDate = val;
}
public function get offerStopDate():EditableInstant
{
return _offerStopDate;
}
private var _offerStopDate:EditableInstant;
внутри класса компонента OfferWindowDatesFragment, запуска и остановки переменные выглядят следующим образом:
[Bindable]
public function set start(val:EditableInstant):void
{
_start = val;
}
public function get start():EditableInstant
{
return _start;
}
private var _start:EditableInstant;
[Bindable]
public function set stop(val:EditableInstant):void
{
_stop = val;
}
public function get stop():EditableInstant
{
return _stop;
}
private var _stop:EditableInstant;
В принципе, я просто хочу, чтобы связать начальную и конечную переменные в моем классе OfferWindowDatesFragment к переменным offerStartDate и offerStopDate в файле AddOfferModel.as. Всякий раз, когда я получаю доступ к переменным start/stop в функциях внутри класса OfferWindowDatesFragment, они равны нулю.
У меня есть функция слушателя событий, который получает срабатывает в OfferWindowDatesFragment в любое время пользователь выбирает новую дату, это выглядит следующим образом:
private function changeOfferDate():void
{
start.currentValue = offerDateEditor.start;
stop.currentValue = offerDateEditor.stop;
}
Каждый раз, когда я достигаю эту функцию, она бросает ошибку, потому что «старт 'и' stop 'равны нулю ... но должны быть уже инициализированы и связаны. Если я посмотрю на переменные в отладчике, я могу подтвердить, что значения в правой части выражения присваивания действительны, а не то, что вызывает ошибку.
Я не знаю, как работает инициализация в Flex, и я предположил, что, пока я создавал экземпляр компонента, как показано в первом фрагменте кода в верхней части моего сообщения, он инициализировал все переменные класса и установил привязки. Я что-то упускаю? Возможно, я неправильно инициализирую данные модели или класса для AddForm.mxml или AddFormModel.as, тем самым связывая нулевые ссылки на поля start/stop в классе OfferWindowDatesFragment?
Любая помощь была бы принята с благодарностью. Благодаря!
EDIT:
Я посмотрел на это все дальше и попытался с помощью Mate впрыснуть 'модель' переменную внутри AddOffer.mxml с действительным объектом AddOfferModel:
<Injectors target="{AddOffer}" debug="{debug}">
<ObjectBuilder generator="{AddOfferModel}" constructorArguments="{scope.dispatcher}" cache="local"/>
<PropertyInjector targetKey="model" source="{lastReturn}" />
</Injectors>
я загружаю AddOffer. mxml в результате события нажатия кнопки в другой форме.
public function addOffer():void
{
var addOfferDialog:AddOffer = new AddOffer();
addOfferDialog.addEventListener("addOffer", addOfferFromDialog);
modalUtil.popup(addOfferDialog);
}
Это не похоже, назначая ничего к «модели» переменной в AddOffer.mxml: Функция, которая выскакивает это выглядит так. Загружает ли это просмотр/диалог таким образом, чтобы не запускать инъекцию из Mate случайно? (Я понимаю, что эта последняя часть может принадлежать на форумах Mate, но я надеюсь, что кто-то здесь может иметь некоторое представление обо всем этом).
Я пытаюсь использовать Мате, чтобы ввести переменную 'model' при загрузке AddOffer.mxml. Я добавил дополнение к моему сообщению выше. – konakevin
Вы подтвердили, что ваш lastReturn содержит экземпляры EditableInstance и что они не являются нулевыми (например, используя Charles Web Proxy для просмотра трафика)? –
Вот работающий проект Mate с включенным режимом просмотра, который вы можете использовать в качестве ссылки http://www.developria.com/2010/05/refactoring-with-mate.html –