-
Como inicializa o projeto MVCBr ?
R. No início no projeto (.dpr) o assistente inclui:
[code]
ApplicationController.Run(TLojaAppController.New,
function: boolean
begin
// retornar True se o applicatio pode ser carregado
// False se não foi autorizado inicialização
result := true;
end);
[/code] -
No formulário principal, como abrir uma janela com outra VIEW?
R. todo VIEW representa um formulário e é controlado por um “controller” – o “controller” é a porta de entrada para inicializar um formulário, assim é necessário criar o “controller”:
[code]
procedure TFormChildSampleView.Button1Click(Sender: TObject);
var aController:IFormChildController;
begin
aController := resolveController<IFormChildController>;
aController.ShowView();
end;
[/code] -
Tenho um MODEL com regras de negócio, como acessar os dados desses MODEL?
R. O primeiro passo é tornar o MODEL visível para o “controller”, visto que o “controller” mantem uma lista de MODEL associado a ele mesmo.
Para instânciar o MODEL dentro do “controller”:
[code]
/// Adicionar os modulos e MODELs personalizados
Procedure TFormChildSampleController.CreateModules;
begin
// adicionar os seus MODELs aqui
// exemplo: add( MeuModel.new(self) );add( TRegrasNegociosModel.new(self) );
end;
[/code]
Na view você pode usar o “controller” para chamar o “MODEL”. -
Como chamar um MODEL de dentro de um VIEW?
R. O MODEL é inicializado junto com o “controller” que mantem uma lista de MODELs ativos para acesso.
[code]
procedure TFormChildSampleView.Button2Click(Sender: TObject);
var
AModel:IRegrasNegociosModel;
begin
AModel := GetModel<IRegrasNegociosModel>;
AModel.Validar(‘Show Model Validar()’);
end;
[/code] -
Quero embutir um VIEW dentro de um TABSHEET, como posso acessar os atributos do formulário ?
R. você precisa inicialmente carregar o “controller” do VIEW – isto vai permitir acesso ao GETVIEW.This que retorna a instância do TFORM;
[code]
procedure TFormChildSampleView.Init;
var
ACtrl:IEmbededFormController;
AForm:TForm;
begin
// incluir incializações aqui// embeded form…
ACtrl := resolveController<IEmbededFormController>;
AForm := TForm(ACtrl.GetView.This);
AForm.parent := TabSheet1;
AForm.BorderStyle := bsNone;
AForm.Align := alClient;
AForm.Show;end;
[/code]
-
Quando trabalho com FMX é comum utilizar TABCONTROL ou TLAYOUT para mostrar VIEWs, como um VIEW pode enviar uma mensagem para outro VIEW que já esta carregada ?
R. para enviar uma mensagem para um VIEW específico, você precisa da “interface” do VIEW desejado – o que pode ser feito incluindo no USES da UNIT uma chamada para a UNIT de “interface” do VIEW.
[code]
procedure TFormChildSampleView.Button4Click(Sender: TObject);
begin
ApplicationController.ViewEvent(IEmbededFormView,’Message to: EmbededFormView’);
end;
[/code]
Outra forma é se você conhece o “controller” alvo, pode enviar a mensagem diretamente para o “controller”.
[code]
procedure TFormChildSampleView.Button5Click(Sender: TObject);
begin
ResolveController<IEmbededFormController>.ViewEvent(‘Message via controller’);
end;
[/code]
Para mandar mensagem para todos os VIEW é possível utilizar o ApplicationController:
[code]
procedure TFormChildSampleView.Button3Click(Sender: TObject);
begin
applicationController.ViewEvent( ‘generic message to all VIEW’ );
end;
[/code]