Changes between Version 5 and Version 6 of WF/UtilizacaodeAjaxemprocessos


Ignore:
Timestamp:
08/22/07 15:13:47 (17 years ago)
Author:
viani
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/UtilizacaodeAjaxemprocessos

    v5 v6  
     1= Utilização de Ajax em Processos = 
     2[[TOC(heading=Workflow,depth=1,WF/Changelog,WF/Documentacao,WF/Instalacao,WF/Links,WF/Propostas,WF/Recursos)]] 
     3 
    14A utilização de Ajax em processos de Workflow requer a utilização de alguns padrões. 
    2   
    35 
    46O código que será executado pelo Ajax deverá estar contido no método de uma classe (ou seja, não será possível executar funções "soltas"). 
    57 
    6  
    7  
    88O arquivo que contém a classe deverá estar localizado na área "code" (que é o mesmo diretório do arquivo shared.php) do processo. O nome deverá seguir o formato: class.ajax.nome_classe.inc.php, por exemplo, supondo que irei chamar, por Ajax, a classe validacao, então o nome do arquivo que contém a classe deverá ser: class.ajax.validacao.inc.php 
    99 
    10  
    11  
    1210Quando a classe for instanciada, seu construtor será chamado sem parâmetros. 
    1311 
    14  
    15  
    1612No template do processo que utilizará Ajax,é necessário incluir a biblioteca!JavaScript que permite sua utilização.Para  isto, foi desenvolvido um plugin do Smarty que insere os arquivos necessários( garantindo que não sejam incluídos maisdeumavez).Para fazer inserção dos arquivos!JavaScript, consulte:    [wiki:WF/InicializacaodoAjax Inicialização do Ajax] 
    1713 
    18  
    19  
    20  
    2114A especificação de qual classe e método será chamado, é feita através do método addVirtualRequest da classe !NanoController (!JavaScript). Este método aceita três parâmetros, são eles (em ordem): 
    2215 
     
    3124  um ojeto !JavaScript contendo eventuais parâmetros para a chamada (este parâmetro é opcional) 
    3225 
    33  
    34  
    3526No caso dos dois últimos parâmetros, é possível fazer a definição dos objetos ''in loco''. 
    3627 
    37  
    38  
    3928== Exemplo de utilização == 
    4029 
     
    7766 
    7867} 
    79  
    80 }}} 
    81  
    82  
     68}}} 
    8369 
    8470No meu arquivo de templates, eu posso fazer uma chamada para um método da classe Ajax da seguinte forma: 
    8571 
    8672{{{ 
    87  
    88 {wf_ajax_init} 
    89  
    90  
    91  
    92 <s c r i p t language="j a v a s c r i p t"> 
     73{wf_ajax_init} 
     74 
     75<script language="javascript"> 
    9376 
    9477{literal} 
     
    123106{/literal} 
    124107 
    125 </s c r i p t> 
    126  
    127 }}} 
    128  
    129  
     108</script> 
     109}}} 
    130110 
    131111A tag Smarty {{literal}} indica que o smarty não irá tentar interpetrar as chaves como sendo seus delimitadores. 
    132112 
    133  
    134  
    135113Com a biblioteca de Ajax utilizada, que é a !NanoAjax, é possível fazer várias chamadas a métodos em uma única chamada Ajax. Sendo assim, o exemplo abaixo chama dois métodos da classe "minhas_strings" (as chamadas não precisam ficar restritas a apenas uma classe). 
    136114 
    137115{{{ 
    138  
    139 {wf_ajax_init} 
    140  
    141  
    142  
    143 <s c r i p t language="j a v a s c r i p t"> 
     116{wf_ajax_init} 
     117 
     118<script language="javascript"> 
    144119 
    145120{literal} 
     
    159134        }); 
    160135 
    161  
    162  
    163136nc.addVirtualRequest('chamada_2', 
    164137        { 
     
    172145 
    173146 
    174  
    175147function exibirResultado(dados) 
    176148 
     
    181153        alert(dados['chamada_1']['data']); 
    182154 
    183  
    184  
    185155        /* irá exibir um alerta com a string "Adeus Mundo cruel" */ 
    186156 
     
    191161{/literal} 
    192162 
    193 </s c r i p t> 
    194  
    195 }}} 
    196  
    197  
     163</script> 
     164}}} 
    198165 
    199166Também é possível chamar um método passando um ou mais parâmetros. Um exemplo que passa um parâmetro pode ser visto abaixo: 
    200167 
    201  
    202  
    203 {{{ 
    204  
    205 {wf_ajax_init} 
    206  
    207  
    208  
    209 <s c r i p t language="j a v a s c r i p t"> 
     168{{{ 
     169{wf_ajax_init} 
     170 
     171<script language="javascript"> 
    210172 
    211173{literal} 
     
    233195nc.sendRequest(); 
    234196 
    235  
    236  
    237197function exibirResultado(dados) 
    238198{ 
     
    246206{/literal} 
    247207 
    248 </s c r i p t> 
    249  
    250 }}} 
    251  
    252  
     208</script> 
     209}}} 
    253210 
    254211Uma outra coisa que pode ser feita, é a utilização de um handler próprio no caso de um erro na chamada Ajax. Exemplo: 
    255212 
    256213{{{ 
    257  
    258 {wf_ajax_init} 
    259  
    260  
    261  
    262 <s c r i p t language="j a v a s c r i p t"> 
     214{wf_ajax_init} 
     215 
     216<script language="javascript"> 
    263217 
    264218{literal} 
     
    287241 
    288242nc.sendRequest(); 
    289  
    290  
    291243 
    292244/* esta função não será chamada pois ocorrerá um erro devido à não existência do método [[BR]] 
     
    310262} 
    311263{/literal} 
    312 </s c r i p t> 
    313  
    314 }}} 
     264</script> 
     265}}}