Underscore: _.wrap no admite la función de ajuste con argumento

Creado en 9 mar. 2013  ·  8Comentarios  ·  Fuente: jashkenas/underscore

Hoy, mientras escribía código con subrayado y columna vertebral, tuve que ajustar algunas funciones. Vi el siguiente ejemplo en underscorejs.org

var hola = función (nombre) {return "hola:" + nombre; };
hola = _.wrap (hola, función (func) {
return "antes", + func ("moe") + ", después";
});
Hola();
=> 'antes, hola: moe, después'

en la penúltima línea
¿Qué pasa si la llamada a la función es como
hola ("umar");
Quiero decir que los argumentos vienen de afuera.

question

Todos 8 comentarios

Wrap ya se encarga de la mayor parte de esto por ti. La fuente de la envoltura es bastante corta de leer. Eso o puede echar un vistazo al ejemplo extendido a continuación:

var greet = function(name, language){
  var response
  if (language === "sp") {
    response = "Hola"
  } else if (language === "fr") {
    response = "Bonjour"
  } else {
    response = "Hello"
  }
  return response + " " + name
}
greet("Ted", "fr"); // => "Bonjour Ted"
greet = _.wrap(greet, function(old_greet, lang){ return old_greet("Ted", lang); } );
greet("sp"); // => "Hola Ted"

Gracias por esta rápida respuesta. Fue de mucha ayuda.
Estoy usando backbone para desarrollar una aplicación empresarial.
view.js
var view = Backbone.View.extend ({

AuthorizeCreateAction: function () {
// aquí "esto" apunta a ver
this.createAlert: _.wrap (this.createAlert, function (_createAlert, _type) {
// autorizar crear acción
return _createAlert (_type);
});
},
createAlert: function (type) {
//PROBLEMA:
// Aquí "esto" apunta a [ventana global]
}
});
ver dentro de la función createAlert cuando estaba llamando a la función createAlert directamente apuntaba a la vista, pero cuando escribí la función contenedora, comenzó a apuntar a [ventana global]
Quiero cambiar la referencia de esto para que apunte a "ver".

Soy nuevo en subrayar, ignore si la pregunta es irrelevante.
Por cierto, el subrayado es impresionante

Deberá llamar a _createAlert con un contexto como el siguiente. Espero que ayude. :)

return _createAlert.call(this, _type);

parece que el subrayado _wrap solo admite un parámetro, use esto en su lugar:

fn = (función (fn, antes, después, self) {
función de retorno () {
if (antes) before.apply (self, argumentos);
var res = fn.apply (yo, argumentos);
if (después) after.apply (self, argumentos);
return res;
}
}) (fn, antes, después, esto)

También puedes usar parcial para ese zarehb

tnx megawac, parcial es más para rellenar previamente los argumentos sin llamar a una función antes y después

La envoltura se implementa a través de _.partial fyi

fn = _.partial(function(fn, before, after, self) {
    var args = _.rest(arguments, 4);
    if (before) before.apply(self,args);
    var res = fn.apply(self,args);
    if (after) after.apply(self,args);
    return res;
})(fn, before, after, this )

eso es correcto y funcionará, pero en caso de que alguien quiera una solución js pura, puede tomar la mía, especialmente, ¡el uso de subrayado no le brinda ningún beneficio en este caso!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

arypbatista picture arypbatista  ·  3Comentarios

sky0014 picture sky0014  ·  8Comentarios

jdalton picture jdalton  ·  4Comentarios

acl0056 picture acl0056  ·  5Comentarios

marcalj picture marcalj  ·  5Comentarios