Um exemplo genérico... e alguma explicação abaixo...
ARQUIVO: /model/ExemploModel.as
package model{
import com.adobe.cairngorm.model.IModelLocator;
import mx.collections.ArrayCollection;
import vo.ProjetoVO;
[Bindable]
public class ExemploModel implements IModelLocator{
// Singleton structure ============================================
private static var instance:ExemploModel;
public function ExemploModel(enforcer:Enforcer){
if(enforcer == null){
throw new Error("Singleton. Please use getInstance()");
}
}
public static function getInstance():ExemploModel{
if(instance == null){
instance = new ExemploModel(new Enforcer);
}
return instance;
}
// Singleton structure ============================================
public var vo:ProjetoVO;
public var projetos:ArrayCollection;
}
}
class Enforcer{}
ARQUIVO: /vo/ProjetoVO.as
package vo {
import com.adobe.cairngorm.vo.IValueObject;
[RemoteClass(alias="cfc.vo.ProjetoVO")] //uso coldfusion/LiveCycle
[Bindable]
public class ProjetoVO implements IValueObject {
public var prop:String;
//outras propriedades que descrevem o objeto de valor
}
}
ARQUIVO: /view/DataGridForm.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox
xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="{init()}"
>
<mx:Script>
<![CDATA[
import model.ExemploModel;
[Bindable] private var exemploModel:ExemploModel;
private function init():void{
exemploModel = ExemploModel.getInstance();
}
]]>
</mx:Script>
<mx:DataGrid id="dgProjetos" dataProvider="{exemploModel.projetos}"
selectedItem="{exemploModel.projeto}" change="{exemploModel.projeto =
lsProjetos.selectedItem as ProjetoVO}">
<!-- Colums -->
</mx:DataGrid>
</mx:VBox>
ARQUIVO: /view/Form.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox
xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="{init()}"
>
<mx:Script>
<![CDATA[
import model.ExemploModel;
[Bindable] private var exemploModel:ExemploModel;
private function init():void{
exemploModel = ExemploModel.getInstance();
}
]]>
</mx:Script>
<mx:List id="lsProjetos" dataProvider="{exemploModel.projetos}"
selectedItem="{exemploModel.projeto}" label="prop"
change="{exemploModel.projeto = lsProjetos.selectedItem as ProjetoVO}"/>
<mx:TextInput text="{exemploModel.projeto.prop}"/>
</mx:VBox>
O conceito está ai... desculpe se houver alguns erros de sintaxe... digitei
aqui mesmo no email. Mas dá pra perceber a estrutura. O "ExemploModel"
possui as propriedades: "projetos:ArrayCollection" (ao qual você vai colocar
os dados que você quer listar no DataGrid por exemplo) e "projeto:ProjetoVO"
(a qual vamos fazer o 'bind' nos controles que podem apresentar o dado
selecionado).
OBS: Eu uso Cairngorm em meus projetos, mas veja que essa aí é uma parte do
Cairngorm que você poderia facilmente adotar sem precisar consumir o
framework. Por exemplo, a depender do seu projeto, no exemplo acima não
faria o menor sentido (ou seja, nao teria nenhuma funcionalidade)
implementar o IModelLocator e/ou o IValueObject. Essas interfaces são apenas
"marcadoras" (no Cairngorm 2.2.1). O IModelLocator para mim só fez sentidos
em projetos com Modules e o IValueObjet só apresentou "funcionalidade"
quando trabalhei o FlashRemoting,LiveCycle ou BlazeDS, mas acredito que
também faça sentido com AMFPHP pela natureza da funcionalidade de "traduzir"
objetos ServerSide/ClientSide do AMF.
IMPORTANTE: Para o código acima funcionar, é necessário que você faça suas
implementações nele... eu só tentei responder a sua questão com os trechos
mais importantes. Espero que ajude esclarecer.
Qualquer coisa, mande ai suas dúvidas! O que eu souber, e tiver tempo,
ajudo. Mas certamente tem bastante gente aqui pra te ajudar.
--
Vicente Maciel Junior
Independent Web Developer & Consultant
Adobe Advanced Certified Developer
Adobe Certified Instructor (ColdFusion & Flash Platform)
+55 71 9212-0909 / 8120-0035
MSN: [EMAIL PROTECTED] / Twitter: macieljr
http://teclandoalto.blogspot.com
2008/10/19 Flávio Tomazio <[EMAIL PROTECTED]>
>
> Como eu faria isso usando o Model Locator do Cairngorm?
> >
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---