When using the component in isolation everything works fine (the parameters 
are passed fine) but I have this problem when running the parent page that 
LOADs several instances of this component. I have printed the values of 
vuelo.id and preorden_vuelo.pedido on my template and, while they are 
printed in the same order as the loaded components and print their 
respective values fine, I noted that doesn't matter in what component I 
execute the action it always pass the last printed parameters (even if the 
component loaded first).

In the parent page I am not able to see the entire code with the DOM 
inspector because in that page I have only a bunch of LOAD calls but not 
the code for each component, that is why I started to print vuelo.id and 
preorden_vuelo.pedido in the component template.

El martes, 3 de enero de 2017, 12:24:48 (UTC-5), Anthony escribió:
>
> Using the browser's DOM inspector, confirm that the URL in the following 
> code has the expected value of pid:
>
> ajax('<?=URL('confirmar_pedido', 'pedir', vars={'vid':vuelo.id, 'pid
> ':preorden_vuelo.pedido})?>', [], target=null
>
> If so, what happens when you click the action button? Does the browser 
> make an Ajax request to that exact URL, and does your pedir() function then 
> receive the proper value of pid?
>
> Anthony
>
> On Tuesday, January 3, 2017 at 11:06:33 AM UTC-5, Bernardo Leon wrote:
>>
>> Hi, I have a component which has a button that performs an action when 
>> clicked but I want the user accept some terms before executing that action.
>> I found Sweet Alert (http://t4t5.github.io/sweetalert/) so I am trying 
>> to use their confirm dialog between the click and the action. Since Sweet 
>> Alert is entirely javascript (and css) I am calling my action using the 
>> *ajax* method passing the parameters the controller gives to the view. 
>>
>> The problem I am facing is that the action receives wrong values in 
>> request.vars. Every time I click the action button I receive a different 
>> parameter. Why is that?
>>
>> This is my component controller:
>>
>> def vuelo_ofertante():
>>     response.delimiters = ('<?', '?>')
>>     vuelo_id = request.vars['vid']
>>     pedido_id = request.vars['pid']
>>     vuelo = db(db.viajes.id == vuelo_id).select(db.viajes.ALL).first()
>>     lugar_vuelo = db(db.lugares.id == 
>> vuelo.lugar).select(db.lugares.nombre, db.lugares.lugar_padre).first()
>>
>>     if lugar_vuelo is None:
>>         texto_lugar = ''
>>     else:
>>         lugar_padre_vuelo = db(db.lugares.id == 
>> lugar_vuelo.lugar_padre).select(db.lugares.nombre).first()
>>         if lugar_padre_vuelo is not None:
>>             texto_lugar = lugar_vuelo.nombre + ' (' + 
>> lugar_padre_vuelo.nombre + ')'
>>         else:
>>             texto_lugar = lugar_vuelo.nombre
>>
>>     preorden_vuelo = db((db.preordenes.viaje == vuelo.id) & 
>> (db.preordenes.pedido == pedido_id)).select(db.preordenes.ALL).first()
>>
>>     return dict(vuelo=vuelo, lugar_vuelo=texto_lugar, 
>> *preorden_vuelo=preorden_vuelo*) (1)
>>
>> def pedir():
>>     id_viaje = request.vars['vid']
>>     *id_pedido = request.vars['pid'] #*I always get a random value here 
>> where I expect to get* the preorden_vuelo.pedido *(1) value that I am 
>> returning in the vuelo_ofertante method
>>
>> and this is my component's .load view:
>>
>> <div class="well well-lg<?if preorden_vuelo.preorden_aprobada:?> 
>> well-green<?pass?>">
>>     <?if preorden_vuelo.preorden_aprobada:?>
>>         <span class="glyphicon glyphicon-ok"></span>
>>         <b><?=T('Gracias!')?></b>
>>     <?pass?>
>>     <b><?=T('Fecha de retorno: ')?></b><?=vuelo.fecha_retorno?>
>>     <br>
>>     <b><?=T('Lugar: ')?></b>
>>     <?if vuelo.lugar is not None:?>
>>         <?=lugar_vuelo?>
>>     <?else:?>
>>         <?=T('No especificado')?>
>>     <?pass?>
>>     <br>
>>     <?if preorden_vuelo.preorden_aprobada is False:?>
>>         <br>
>>         <?=T('Costo: ')?><b>$<?=preorden_vuelo.costo_cliente?></b>
>>         <br>
>>         <br>
>>         <a class='btn btn-primary' 
>> onclick='confirmacion();'><?=T('PEDIR')?></a> <!-- does not work -->
>>         <!-- <?=A(T('PEDIR'), _class='btn btn-primary', 
>> callback=URL('confirmar_pedido', 'pedir', vars={'vid':vuelo.id, 
>> 'pid':preorden_vuelo.pedido}))?> --> <!-- Does work as expected but I don't 
>> know how to use Sweet Alert here -->
>>     <?pass?>
>>     <script>
>>         function swal_aceptado(){
>>             swal({
>>                     title: "<?=T('Muchas gracias!')?>",
>>                     text: "<h4><?=T('Nos comunicaremos con 
>> usted.')?></h4>",
>>                     html: true,
>>                     type: "success",
>>                     allowEscapeKey: false,
>>                     confirmButtonText: "<?=T('Entendido')?>"
>>                  }, function(){
>>                     eval("ajax('<?=URL('confirmar_pedido', 
>> 'redireccionar')?>', [], target=null)");
>>                  });
>>         }
>>
>>         function confirmacion(){
>>             swal({
>>                     title: "<?=T('Esta a punto de llevar a cabo un 
>> acuerdo')?>",
>>                     text: '<h4><?=T('Asegurese que a leído y aceptado 
>> nuestros ')?><?=A(T('términos y condiciones'), _href=URL('default', 
>> 'eula'))?></h4>',
>>                     html: true,
>>                     type: "info",
>>                     showCancelButton: true,
>>                     allowOutsideClick: true,
>>                     confirmButtonText: "<?=T('Estoy de acuerdo!')?>",
>>                     cancelButtonText: "<?=T('Cancelar')?>",
>>                     closeOnConfirm: false,
>>                     showLoaderOnConfirm: true
>>                 }, function() {
>>                     setTimeout(function(){
>>                         <?print vuelo.id, preorden_vuelo.pedido?>
>>                         ajax('<?=URL('confirmar_pedido', 'pedir', 
>> vars={'vid':vuelo.id, *'pid':preorden_vuelo.pedido*})?>', [], 
>> target=null);
>>                         //eval("ajax('<?=URL('confirmar_pedido', 'pedir', 
>> vars={'vid':vuelo.id, 'peid':preorden_vuelo.pedido})?>', [], 
>> target=null)");
>>                         swal_aceptado();
>>                     }, 500);
>>                 });
>>             }
>>     </script>
>> </div>
>>
>> Any help will be greatly appreciated. Thank you guys!
>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to