]> git.llucax.com Git - software/sercom.git/commitdiff
Simplifico el url del widget.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 27 Feb 2007 22:33:48 +0000 (22:33 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 27 Feb 2007 22:33:48 +0000 (22:33 +0000)
Cambio de planes, el parametro do_add ahora es un simple callback que recibe la ID del campo de texto y de la lista
y debe retornar el URL a llamar para obtener los datos (simplificando mucho el manejo del loading y la llamada a JSON).

Del lado del modelo se debe retornar un diccionario con :
  * error = True|False : indica si hubo o no error
  * msg
    - Si error == True el texto de error a mostrar
    - Si error == False un diccionario con id y value para el option a agregar de manera que queda
      <option value="id">value</option> (si, poco feliz lo de value :P)

sercom/subcontrollers/grupo/__init__.py
sercom/widgets.py

index 46422c72e582e65cb6a36e85c87d0d544db28b05..2ba95e15e93f1c4e173fe0ade1901dee888d0f21 100644 (file)
@@ -62,14 +62,10 @@ def get_cursos():
     return [(0, u'---')] + [(fk1.id, fk1.shortrepr()) for fk1 in Curso.select()]
 
 ajax = u"""
-    function alumnos_agregar_a_la_lista(texto, lista, loading)
+    function alumnos_agregar_a_la_lista(texto, lista)
     {
         t = MochiKit.DOM.getElement(texto);
 
-        /* Como no se si se puede hacer de otra manera, asumo que tengo en
-         * el form un Combo que se llama curso en el codigo, y tiro error si
-         * no existe
-         */
         curso = MochiKit.DOM.getElement('form_cursoID');
         if (!curso) {
             alert("No deberias ver esto, y quiere decir que tu form esta roto.\\nTe falta un combo de curso");
@@ -79,12 +75,9 @@ ajax = u"""
             alert('Debes seleccionar un curso primero');
             return;
         }
-        load = MochiKit.DOM.getElement(loading);
-        load.style.visibility = 'visible';
         url = "/grupo/get_inscripto?cursoid="+curso.options[curso.selectedIndex].value+"&padron="+t.value;
-        var d = loadJSONDoc(url);
-        d.addCallbacks(partial(_on_alumno_get_result, lista, loading), partial(_on_alumno_get_error, loading));
         t.value = "";
+        return url;
     }
 
     function err (err)
index 419fa63adc2816bbfe57de6a0d92e746dd580751..5f9540c531d26bdfd1e38792874b15ee0336a97b 100644 (file)
@@ -57,6 +57,31 @@ MultiSelectAjax = '''
         for (i=l.selectedIndex; i<l.options.length-1;i++)
             l.options[i] = l.options[i+1];
     }
+
+    function _do_add(callback, texto, lista, loading)
+    {
+        url = callback(texto, lista);
+        t = MochiKit.DOM.getElement(texto);
+
+        /* Como no se si se puede hacer de otra manera, asumo que tengo en
+         * el form un Combo que se llama curso en el codigo, y tiro error si
+         * no existe
+         */
+        curso = MochiKit.DOM.getElement('form_cursoID');
+        if (!curso) {
+            alert("No deberias ver esto, y quiere decir que tu form esta roto.\\nTe falta un combo de curso");
+            return;
+        }
+        if (curso.options[curso.selectedIndex].value <= 0) {
+            alert('Debes seleccionar un curso primero');
+            return;
+        }
+        load = MochiKit.DOM.getElement(loading);
+        load.style.visibility = 'visible';
+        var d = loadJSONDoc(url);
+        d.addCallbacks(partial(_on_alumno_get_result, lista, loading), partial(_on_alumno_get_error, loading));
+    }
+
 '''
 
 class AjaxMultiSelect(widgets.MultipleSelectField):
@@ -66,7 +91,7 @@ class AjaxMultiSelect(widgets.MultipleSelectField):
     <input type="text" id="${field_id}_nuevo" size="10" />
     <img src="/static/images/loading.gif" align="baseline" style="visibility:hidden;" id="${name}_loading" width="16px" height="16px" />
     <input type="button" id="_agregar" value="Agregar"
-        onClick=" ${on_add}('${field_id}_nuevo', '${field_id}', '${name}_loading'); " />
+        onClick=" _do_add(${on_add}, '${field_id}_nuevo', '${field_id}', '${name}_loading'); " />
     </div>
     <div>
     <select