Comprendre le dataBinding
Bonjour à tous,
Par curiosité, je voudrais comprendre :)
Quelque chose m'échappe dans le mécanisme de binding de l'exemple suivant. Je ne comprend pas pourquoi le label du premier bouton ne fonctionne pas alors que le deuxième si :s
L'application : deux boutons qui ajoute 'y' au nom du chien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
<fx:Script>
<![CDATA[
[Bindable]
private var _pm:PM;
[Bindable]
private function get dog():Dog{
return _pm.animal as Dog;
}
private function set dog(value:Dog):void{
_pm.animal = value;
}
protected function nicknameButton_clickHandler(event:MouseEvent):void
{
if(_pm==null){
_pm = new PM();
}else{
dog.nickName = dog.nickName +'y';
}
}
]]>
</fx:Script>
<s:layout>
<s:HorizontalLayout />
</s:layout>
<s:Button id="notWorkingButton"
label="{dog.nickName}"
click="nicknameButton_clickHandler(event)"/>
<s:Button id="workingButton"
label="{(_pm.animal as Dog).nickName}"
click="nicknameButton_clickHandler(event)"/>
</s:Application> |
et le "modèle"
PM.as :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
[Bindable]
public class PM
{
public var animal:Animal;
public function PM()
{
this.animal = new Dog();
}
} |
Animal.as :
Code:
1 2 3 4 5 6 7 8
|
[Bindable]
public class Animal
{
public function Animal()
{
}
} |
Dog.as :
Code:
1 2 3 4 5 6 7 8 9 10
|
[Bindable]
public class Dog extends Animal
{
public var nickName:String = "Jack";
public function Dog()
{
super();
}
} |
Merci d'avance pour vos explications.