GWT-EXT - Qual é a melhor maneira de widgets para um específico ContentPanel depois de um evento?
Pergunta
primeiro post não me machuque:)
Eu estou usando um BorderLayout
com os habituais painéis Norte, Oeste, Centro, Sul. Na West ContentPanel
, eu tenho um Tree
. Se ocorrer um evento (OnClick
) Eu quero uma caixa de diálogo específica exibida no Centro ContentPanel
.
Qual é a melhor maneira para eu fazer isso? Atualmente estou usando uma função chamada returnPanel()
que retorna a ContentPanel
centro. No manipulador de eventos que eu chamar essa função (MainWindow.returnPanel().add(myDialog))
.
Solução
A forma como você está fazendo isso é intuitivo e obras, mas vai começar a causar o inferno quando a aplicação cresce, porque diferentes partes do aplicativo são fortemente acopladas. As soluções para este problema são a MVC padrão de design e observador padrão de design .
O ideal, usando o padrão MVC, você não quer qualquer widget para 'conhecer' de qualquer outro widget. Há apenas classe que conhece todos os widgets, que é o Controller. A qualquer momento um widget precisa mensagem / sinal outro widget, ele diz-lhe para a classe Controller, que retransmite a mensagem de forma adequada para o widget apropriado. Desta forma, os dois widgets são decpoupled e pode-se alterar sem quebrar o outro. Você pode querer usar um enum para enumerar todas as acções possíveis para que o controlador tem para responsd.
Se seu widget tem que chamar apenas o controlador quando um evento ocorre, você pode simplesmente chamar um método apropriadamente chamado (estático) nele e ser feito com ele. No entanto, assim como várias outras necessidades classes para ser informado de um evento, você é melhor de usar o padrão Observer, que lhe permite sinalizar várias outras classes, sem alterar sua classe. Ele simplesmente chama notifyPObservers () na eventHandler e é isso. Quantos ouvintes existem, e que tipo forem, é irrelevante. Desta forma, você também dissociar uma classe dele é ouvintes. Mesmo que apenas as escutas do controlador, pode ser aconselhável usar o padrão, como claramente separados do código de 'call back' do outro código nas classes.
BTW, isso não tem nada a ver com o GWT ou até mesmo Java em particular.