Changes between Version 5 and Version 6 of WF/UtilizacaodeAjaxemprocessos
- Timestamp:
- 08/22/07 15:13:47 (17 years ago)
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 1 4 A utilização de Ajax em processos de Workflow requer a utilização de alguns padrões. 2 3 5 4 6 O 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"). 5 7 6 7 8 8 O 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 9 9 10 11 12 10 Quando a classe for instanciada, seu construtor será chamado sem parâmetros. 13 11 14 15 16 12 No 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] 17 13 18 19 20 21 14 A 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): 22 15 … … 31 24 um ojeto !JavaScript contendo eventuais parâmetros para a chamada (este parâmetro é opcional) 32 25 33 34 35 26 No caso dos dois últimos parâmetros, é possível fazer a definição dos objetos ''in loco''. 36 27 37 38 39 28 == Exemplo de utilização == 40 29 … … 77 66 78 67 } 79 80 }}} 81 82 68 }}} 83 69 84 70 No meu arquivo de templates, eu posso fazer uma chamada para um método da classe Ajax da seguinte forma: 85 71 86 72 {{{ 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"> 93 76 94 77 {literal} … … 123 106 {/literal} 124 107 125 </s c r i p t> 126 127 }}} 128 129 108 </script> 109 }}} 130 110 131 111 A tag Smarty {{literal}} indica que o smarty não irá tentar interpetrar as chaves como sendo seus delimitadores. 132 112 133 134 135 113 Com 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). 136 114 137 115 {{{ 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"> 144 119 145 120 {literal} … … 159 134 }); 160 135 161 162 163 136 nc.addVirtualRequest('chamada_2', 164 137 { … … 172 145 173 146 174 175 147 function exibirResultado(dados) 176 148 … … 181 153 alert(dados['chamada_1']['data']); 182 154 183 184 185 155 /* irá exibir um alerta com a string "Adeus Mundo cruel" */ 186 156 … … 191 161 {/literal} 192 162 193 </s c r i p t> 194 195 }}} 196 197 163 </script> 164 }}} 198 165 199 166 Também é possível chamar um método passando um ou mais parâmetros. Um exemplo que passa um parâmetro pode ser visto abaixo: 200 167 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"> 210 172 211 173 {literal} … … 233 195 nc.sendRequest(); 234 196 235 236 237 197 function exibirResultado(dados) 238 198 { … … 246 206 {/literal} 247 207 248 </s c r i p t> 249 250 }}} 251 252 208 </script> 209 }}} 253 210 254 211 Uma outra coisa que pode ser feita, é a utilização de um handler próprio no caso de um erro na chamada Ajax. Exemplo: 255 212 256 213 {{{ 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"> 263 217 264 218 {literal} … … 287 241 288 242 nc.sendRequest(); 289 290 291 243 292 244 /* esta função não será chamada pois ocorrerá um erro devido à não existência do método [[BR]] … … 310 262 } 311 263 {/literal} 312 </s c r i p t> 313 314 }}} 264 </script> 265 }}}