Librerías AJAX

247 views
Skip to first unread message

mapner

unread,
Jul 21, 2013, 6:15:34 PM7/21/13
to web2py-...@googlegroups.com
Hola a todos,

Soy nuevo en este grupo, actualmente estoy desarrollando algunas aplicaciones en PHP con un FW MVC, BD Firebird y una librería AJAX llamada JeasyUI (http://jeasyui.com/) con buenos resultados.
A su vez estoy buscando algún otro entorno back-end que tenga algo mas de claridad y facilidad de mantenimiento, sobre todo en la definición de modelos. Así llegué a leer sobre Web2Py el cual parece ser un buen RAD MVC en Python.
Concretamente la consulta es para el caso de JeasyUI que viene con unos simples tutoriales de un CRUD muy sencillo y unas pocas líneas de PHP plano parar ejemplificar el servidor.


Lo ven factible manejar este tipo de librerías RIA con web2py ? Alguien me podría ejemplificar el uso?

gracias

Saludos
Mauricio

samuel bonilla

unread,
Jul 22, 2013, 4:04:25 PM7/22/13
to web2py-...@googlegroups.com
Bienvenido, has tomado una decicion inteligente, y claro que es posible puedes usar cualquier libreria javascript, cuando usas web2py el unico limite es tu creatividad... la verdad no conocia  esta libreria voy a dar un vistazo a ver que tal...

puedes leer el manual oficial si quieres mas informacion sobre el framework http://web2py.com/book

http://web2py.com/

SALUDOS



--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a web2py-usuari...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

emp2web

unread,
Jul 23, 2013, 3:27:57 PM7/23/13
to web2py-...@googlegroups.com
Saludos,

Mapner para usar esta libreria lo que debes hacer es cargarla en el template y seguir el manual, al momento de realizar los llamados a las funciones lo envias a controladores e igual realizas las vistas que necesites.

Este es un Ejemplo que esta en la pagina de la libreria, se cambian los .php a la forma en que llamaria los controladores, algunos necesitan de una vista.


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Basic CRUD Application - jQuery EasyUI CRUD Demo</title>
  6. <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
  8. <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
  9. <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.min.js"></script>
  10. <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
  11. </head>
  12. <body>
  13. <h2>Basic CRUD Application</h2>
  14. <div class="demo-info" style="margin-bottom:10px">
  15. <div class="demo-tip icon-tip">&nbsp;</div>
  16. <div>Click the buttons on datagrid toolbar to do crud actions.</div>
  17. </div>
  18. <table id="dg" title="My Users" class="easyui-datagrid" style="width:700px;height:250px"
  19. //url="get_users.php"
  20. url = "{{=URL('controlador','metodo')}}"
  21. toolbar="#toolbar" pagination="true"
  22. rownumbers="true" fitColumns="true" singleSelect="true">
  23. <thead>
  24. <tr>
  25. <th field="firstname" width="50">First Name</th>
  26. <th field="lastname" width="50">Last Name</th>
  27. <th field="phone" width="50">Phone</th>
  28. <th field="email" width="50">Email</th>
  29. </tr>
  30. </thead>
  31. </table>
  32. <div id="toolbar">
  33. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">New User</a>
  34. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">Edit User</a>
  35. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">Remove User</a>
  36. </div>
  37. <div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"
  38. closed="true" buttons="#dlg-buttons">
  39. <div class="ftitle">User Information</div>
  40. <form id="fm" method="post" novalidate>
  41. <div class="fitem">
  42. <label>First Name:</label>
  43. <input name="firstname" class="easyui-validatebox" required="true">
  44. </div>
  45. <div class="fitem">
  46. <label>Last Name:</label>
  47. <input name="lastname" class="easyui-validatebox" required="true">
  48. </div>
  49. <div class="fitem">
  50. <label>Phone:</label>
  51. <input name="phone">
  52. </div>
  53. <div class="fitem">
  54. <label>Email:</label>
  55. <input name="email" class="easyui-validatebox" validType="email">
  56. </div>
  57. </form>
  58. </div>
  59. <div id="dlg-buttons">
  60. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">Save</a>
  61. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">Cancel</a>
  62. </div>
  63. <script type="text/javascript">
  64. var url;
  65. function newUser(){
  66. $('#dlg').dialog('open').dialog('setTitle','New User');
  67. $('#fm').form('clear');
  68. url = "{{=URL('controlador','metodo')}}";
  69. }
  70. function editUser(){
  71. var row = $('#dg').datagrid('getSelected');
  72. if (row){
  73. $('#dlg').dialog('open').dialog('setTitle','Edit User');
  74. $('#fm').form('load',row);
  75. url = "{{=URL('controlador','metodo')}}"+row.id;
  76. }
  77. }
  78. function saveUser(){
  79. $('#fm').form('submit',{
  80. url: url,
  81. onSubmit: function(){
  82. return $(this).form('validate');
  83. },
  84. success: function(result){
  85. var result = eval('('+result+')');
  86. if (result.errorMsg){
  87. $.messager.show({
  88. title: 'Error',
  89. msg: result.errorMsg
  90. });
  91. } else {
  92. $('#dlg').dialog('close'); // close the dialog
  93. $('#dg').datagrid('reload'); // reload the user data
  94. }
  95. }
  96. });
  97. }
  98. function destroyUser(){
  99. var row = $('#dg').datagrid('getSelected');
  100. if (row){
  101. $.messager.confirm('Confirm','Are you sure you want to destroy this user?',function(r){
  102. if (r){
  103. $.post("{{=URL('controlador','metodo')}}",{id:row.id},function(result){
  104. if (result.success){
  105. $('#dg').datagrid('reload'); // reload the user data
  106. } else {
  107. $.messager.show({ // show error message
  108. title: 'Error',
  109. msg: result.errorMsg
  110. });
  111. }
  112. },'json');
  113. }
  114. });
  115. }
  116. }
  117. </script>
  118. <style type="text/css">
  119. #fm{
  120. margin:0;
  121. padding:10px 30px;
  122. }
  123. .ftitle{
  124. font-size:14px;
  125. font-weight:bold;
  126. padding:5px 0;
  127. margin-bottom:10px;
  128. border-bottom:1px solid #ccc;
  129. }
  130. .fitem{
  131. margin-bottom:5px;
  132. }
  133. .fitem label{
  134. display:inline-block;
  135. width:80px;
  136. }
  137. </style>
  138. </body>
  139. </html>

mapner

unread,
Jul 25, 2013, 5:07:12 PM7/25/13
to web2py-...@googlegroups.com
Gracias por las respuestas,

emp2web, el ejemplo que das es claro, de hecho hoy probé renderizar la vista CRUD desde el controlador CRUD y anduvo OK. El tema de la URL respuesta desde la vista hacia el controlador la tengo que ver más en detalle. Cuando se trabaja con librerías AJAX RIA como JeasyUI o ExtJS el control de eventos se dispara desde la UI a una URL de controlador donde este llama al modelo y le devuelve a la vista un set de datos en JSON. Quizá eso cambia un poco el paradigma del clásico MVC donde el controlador va generando las vistas en conjunto con los datos respuesta. Por otro lado veo que Web2Py tiene un conjunto de Helpers para generar HTML desde funciones Python. Uds. sugieren programar de esa manera o dejar las vistas más al estilo HTML?

saludos 

Roberto Perdomo

unread,
Jul 25, 2013, 6:17:50 PM7/25/13
to web2py-...@googlegroups.com

No veo porque cambiaría el paradigma MVC. web2py soporta JSON, por lo que muy cómodamente podrías adaptar la vista con los métodos de la librería javascript que utilizas y hacer los llamados a dichos controladores. 

Si defines el modelo, los controladores y las vistas por separado , manteniendo el esquema de Web2py seguirás utilizando MVC.

Un saludo.

emp2web

unread,
Jul 25, 2013, 6:27:01 PM7/25/13
to web2py-...@googlegroups.com
Saludos,

Totalmente de acuerdo conRoberto aca tienes la informacion de como hacerlo.

Alan Etkin

unread,
Jul 25, 2013, 6:28:55 PM7/25/13
to web2py-...@googlegroups.com
Por otro lado veo que Web2Py tiene un conjunto de Helpers para generar HTML desde funciones Python. Uds. sugieren programar de esa manera o dejar las vistas más al estilo HTML?

Por supuesto que es recomendable usar los helper si estás usando web2py. Si necesitás personalizar el html después podés hacer el render y modificar la salida, mientras que el caso opuesto es más complicado

Por cierto, si pensás usar una interfaz para web2py y el client-framework, hay un plugin disponible en

http://code.google.com/p/plugin-clientapi/

mapner

unread,
Jul 26, 2013, 8:36:30 AM7/26/13
to web2py-...@googlegroups.com
Roberto, si es verdad, el paradigma MVC se cumple en cuanto a la separación de tareas, lo que cambia es la forma de refrescar las vistas con sus datos. Como es sabido el uso de estas librerías AJAX evita la recarga entera de la vista cada vez que hay que refrescar datos y a su vez eso implica programar un tanto más desde el cliente (javascript por lo general) para manejar eventos, formatear datos y etc... o sea, quizá no todo es generable desde el código en el servidor, más allá de los buenos Helpers que tiene la herramienta. En el caso de web2py veo que hay vistas auto generadas como en el caso de los form y parece práctico pero no se si es aplicable a casos más complejos como lo serían las UI de sistemas de negocios en formularios, grillas, dahsboards, etc... un ejemplo son los sistemas de sueldos o nóminas donde la ficha del empleado puede tener hasta 30 campos diferente agrupados en distintas solapas... quizá tantos años de porgramación "visual" han sobrestimado la importancia de las UI pero la cultura de los usuarios que vienen de esos sistemas no es facilmente cambiable para pasar a formularios web de tipo plano...

Saludos
Reply all
Reply to author
Forward
0 new messages