Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] $.Deferred y ejecución por defecto.

Estas en el tema de $.Deferred y ejecución por defecto. en el foro de Jquery en Foros del Web. Buenas, He creado una función que se encarga de transformar un objeto JSON en una vista HTML a mi conveniencia pongamos que así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 30/09/2014, 06:47
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
$.Deferred y ejecución por defecto.

Buenas,

He creado una función que se encarga de transformar un objeto JSON en una vista HTML a mi conveniencia pongamos que así:
Código Javascript:
Ver original
  1. function json2string(data) {
  2.     var html
  3.     // conversion a `html` de `data`
  4.     return html
  5. }
y una función que, hecha una petición ajax con jQuery, transforma el contenido de cierto elemento del DOM con ayuda de la función `json2string` tal que así:
Código Javascript:
Ver original
  1. function parse(url, elem) {
  2.     $.ajax(url, {
  3.         type: "GET",
  4.         dataType: "json",
  5.         success: function (data) {
  6.             elem.innerHTML = json2string(data)
  7.         },
  8.     });
  9. }
Hasta aquí ningún problema. Ahora imaginemos que esta función quiero que devuelva un objeto $.Deferred con tal de poder usar promesas. Por ejemplo:

Código Javascript:
Ver original
  1. parse('api/ciudades', elem)
  2. .done(function(data) {
  3.     alert('Yuhuuu! la petición ajax ha funcionado')
  4. }

Si implementara la función `parse`así:
Código Javascript:
Ver original
  1. function parse(url, elem) {
  2.     return $.ajax(url, {
  3.         type: "GET",
  4.         dataType: "json",
  5.     });
  6. }
no haría lo que deseo, ya que la instrucción por defecto de modificar el contenido del elemento deseado no se ejecutaría

Yo he pensado en implementar algo así:
Código Javascript:
Ver original
  1. function parse(url, elem) {
  2.     return $.ajax(url, {
  3.         type: "GET",
  4.         dataType: "json",
  5.     }).pipe(function(data) {
  6.         var dfd = $.Deferred()
  7.         dfd.resolve()
  8.         var promise = dfd.promise()
  9.         var done = promise.done
  10.         promise.done = function(callback) {
  11.             elem.innerHTML = json2string(data)
  12.             done(callback.bind(data))
  13.         }
  14.     })
  15. }
Es decir, cambio el método done para que se ejecute tal como quiero. Sin embargo no me acaba de gustar. ¿Hay alguna manera más limpia o nativa de jQuery para hacerlo?

Un saludo y gracias!
__________________
github.com/xgbuils | npm/xgbuils
  #2 (permalink)  
Antiguo 30/09/2014, 09:00
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: $.Deferred y ejecución por defecto.

Vaya, era tan fácil como esto:
http://jsfiddle.net/ckba9k8n/

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:26.