someModel.bind("all", function(eventName, model, XXXXX, YYYYY) {
   options.myStuff = "MyStuff et all";
   self.trigger(eventName, model, ??????, ?????);
}

XXXXX, YYYYY, ????? marque el problema: ¿Dónde están las opciones?

Quiero aumentar las opciones y reactivar cualquier evento en un nuevo contexto. El problema es que backbone coloca opciones en 4ª posición en algunos eventos ("cambio: xxx", "error", etc.) y en 3ª posición en algunos otros ("cambio", "reset") lo que me hace imposible saber en qué parte de los argumentos están las opciones, y saber en qué parte del activador debería colocar las opciones mejoradas. ¿Hay alguna otra forma, excepto el fragmento separado obvio para cada evento individual?

ACTUALIZACIÓN: Mirando la fuente de la red troncal, una solución aceptable para mí sería parchear la red troncal para incluir siempre un tercer argumento en cada evento, de modo que las opciones estén siempre en la misma cuarta posición. Es un cambio simple, pero espero una solución con más espacio para el usuario.

1
Paralife 27 ene. 2012 a las 16:33

1 respuesta

La mejor respuesta

Por lo que puedo decir, las opciones son siempre el último argumento que se pasa a la devolución de llamada. Puede usar el objeto arguments de la devolución de llamada para modificar las opciones. https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments

Por ejemplo,

var x=new Backbone.Model();
x.bind("all", function(e) {
    console.log("x : "+e);
    console.log(arguments[arguments.length-1]);
});

var m=new Backbone.Model( {name:"a"} );
m.bind("all",function(e){
    console.log("m : "+e);
    var args=Array.prototype.slice.call(arguments);

    args[args.length-1].modified=true;
    x.trigger.apply(x,args);
});

m.set({name:"b"});
4
nikoshr 27 ene. 2012 a las 17:51