SPA
O comportamento no TabManager SPA é obtido abrindo uma nova aba (tab) na mesma página e ocultando a anteior, depois fechando da última aba no sentido da primeira. Cada aba é Modal, ou seja, não permite a volta para a anteior de fechar a atual.
Eventos das abas SPA
- onShow: Ocorre depois que a nova aba foi aberta;
- onBack: Ocorre quando a aba posterior a essa foi fechada e a aba atual passa a ser essa novamente;
- onClose: Ocorre depois que a aba atual foi fechada.
Ex:
tabManager.GetLastTab().bag["onShow"] = function(lastTab: rjs.Tab)
alert("Oi " + lastTab.titulo);
}
tabManager.GetLastTab().bag["onBack"] = function(lastTab: rjs.Tab)
alert("Oi " + lastTab.titulo);
}
tabManager.GetLastTab().bag["onClose"] = function(lastTab: rjs.Tab)
alert("Tchau " + lastTab.titulo);
}
Atributos data-
Os atributos data-template, data-alias e data-event fornecem facilidades ao desenvolvedor por ligar o HTML a javascript. Qualquer elemento HTML pode ser marcado com esses 3 atributos.
O TabManager também estabelece um convenção onde funções, variáveis e ojetos devem ser sempre colocados em tabManager.bag ou tabManager.GetLastTab().bag e nunca na raiz “window” da página.
Templates
Template é uma função javascript que o binder do TabManager executa ao encontrar um elemento marcado com o atributo data-template.
Pode ser passado parâmetros adicionais para a função com o atributo data-template-params. Estes devem ser separados por vírgula. Todos os parâmetros são injetados dentro do template como strings. Mais de um template pode ser colocado fazendo a separação por pipe “t1|
t2” e também seus respectivos parâmetros quando houverem “|
param1,param2”.
Ex:
<elemento data-template="AjaxRazorGrid3Template|xyzTemplate" data-template-params"1,2|2" ...> ... </elemento>
tabManager.bag["AjaxRazorGrid3Template"] = function (element: JQuery<HTMLElement>, tm: rjs.TabManager, parametro1: string, parametro2: string) {
...
}
Eventos do TabManager
Eventos podem ser criados usando o atributo data-event. É como utilizar eventos no HTML da maneira tradicional, mas ao fazer isso, o TabManager irá enviar sempre dois parâmetros adicionais ao evento, o lastTab, que representa a tab atual e o elemento que disparou o evento. Esses parâmetros costumam ser úteis ao código que irá tratar o evento.
Parâmetros adicionais podem ser passados para a função usando o atributo data-event-params. Cada parâmetro deve ser separado por vírgula e são passados como strings para a função.
Ex:
<elemento data-event="change blur etc:nomeFuncao" data-event-params="1,2">...</elemento>
tabManager.GetLastTab().bag["onTipoPessoa"] = function(lastTab: rjs.Tab, el: HTMLElement, param1: string, param2: string) {
...
}
Alias
Cria em GetLastTab().bag um JQuery com o alias informado no elemento, com o prefixo $, exemplo: $combobox. disponivel logo após o termino do bind, como no evento onShow.
<elemento data-alias="nomeDoAlias">...</elemento>
$nomeDoAlias.hide();
AJAX
Templates que fazem requisições AJAX podem ter atributos de eventos AJAX associados a eles, os eventos vão acionar a função implementada no momento apropriado.
Esse elementos podem ter o seguintes data-attr de eventos adicionados:
data-before-ajax=’funcao(callerElement, [lastTab/null])’ [ambos]
Executa a função exatamente antes de chamar por ajax.
data-before-ajax-apply-response=’funcao(callerElement, data, jqXHR, lastTab)’ [ambos]
Executa a função exatamente antes de trabalhar o response do ajax. IMPORANTE: retornar true da função para deixar o TabManager executar o comportamento padrão (tratar o response) e false para o tratamento ser apenas o que foi escrito na função.
data-after-ajax=’funcao(callerElement, data, jqXHR, lastTab)’ [ambos]
Executa a função depois que o response já foi tratado pelo TabManager. Cuidado com o parâmetro lastTab, pois se a função callback do ajax tiver fechado alguma aba, pode ser que você fique sem entender o que pode estar dando errado em sua lógica.
<a data-before-ajax="beforeAjaxEx"
data-before-ajax-apply-response="beforeAjaxApplyResponseEx"
data-after-ajax="afterAjaxEx">exemplo
</a>
<form data-before-ajax="beforeAjaxEx"
data-before-ajax-apply-response="beforeAjaxApplyResponseEx"
data-after-ajax="afterAjaxEx">
exemplo
</form>
}
tabManager.GetLastTab().bag.beforeAjaxEx = function(callerElement, lastTab) {
...
}
tabManager.GetLastTab().bag.beforeAjaxApplyResponseEx = function(callerElement, data, jqXHR, lastTab) {
...
return true/false;
}
tabManager.GetLastTab().bag.afterAjaxEx = function(callerElement, data, jqXHR, lastTab) {
...
}
MPA
Não quer usar SPA, use MPA, o TabManger também está pronto para isso.