Я должен динамично связать свойства компонентов, созданных во времени выполнения. В данном случае предположите, что я должен использовать bindProperty.
Я не вполне понимаю, почему следующий упрощенный тест перестал работать (см. код). Когда я нажимаю кнопку, текст метки не изменяется.
Я понимаю, что существуют более простые способы пойти об этом конкретном примере с помощью традиционного нединамического связывания, но я должен понять это с точки зрения использования bindProperty.
Кто-то может помочь мне понять то, что я пропускаю?
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.binding.utils.*;
public var Available:ArrayCollection=new ArrayCollection();
public function get Value():String {
return (Available.getItemAt(0).toString());
}
public function Init():void {
Available.addItemAt('Before', 0);
BindingUtils.bindProperty(Lab, 'text', this, 'Value');
}
public function Test():void {
Available.setItemAt('After', 0);
}
]]>
</mx:Script>
<mx:Label x="142" y="51" id="Lab"/>
<mx:Button x="142" y="157" label="Button" click="Test();"/>
</mx:WindowedApplication>
Заранее спасибо.
Как упоминал Гленн, вам необходимо добавить тег [Bindable]
в Value
.
Кроме того, вы не определили сеттер для свойства. Связывание данных вызывается только при вызове соответствующего установщика. Процесс выглядит примерно так: вы вызываете сеттер - Flex обновляет данные, вызывая геттер.
[Bindable]
public function get value():String {
return (Available.getItemAt(0).toString());
}
public function set value(v:String):void {
Available.setItemAt(v, 0);
}
public function init():void {
Available.addItemAt('Before', 0);
BindingUtils.bindProperty(Lab, 'text', this, 'Value');
}
public function iest():void {
value = "After";
}
Обратите внимание, что я изменил имена функций и свойств на строчные в соответствии с обычным соглашением. InitialCaps используются только для имен классов.
Я никогда не использую BindingUtils, но сначала предполагаю, что вам не хватает тега [Bindable] в «Value».