Pasando parámetros en JQuery .trigger

82

Estoy usando el disparador JQuery pero no estoy seguro de cuál es la sintaxis correcta para pasar parámetros en mi situación. Aquí es donde hago la llamada:

$('#'+controlName).trigger(event);

Aquí es donde estoy haciendo el enlace de eventos:

$(window).on('onPartialRendered', onPartialRendered);

Y aquí está mi controlador de eventos:

var onPartialRendered = function () {

    .....
};

Todo funciona bien hasta que intento pasar parámetros. ¿Cuál sería la forma correcta de hacerlo según mi ejemplo?

usuario517406
fuente
Sí, intenté pasar params usando la sintaxis allí trigger (event, ['Param1', 'Param2']) pero sin éxito
user517406
Tu onPartialRenderedno tiene ningún parámetro en su firma. Debería serlo onPartialRendered = function(e, p1, p2).
Rocket Hazmat
@ user517406 ¿cómo intentó pasar los parámetros que no funcionaron?
epascarello
@ user517406 intenta publicar algún código en jsfiddle.net para que podamos jugar.
Edper

Respuestas:

151

El primer parámetro es siempre una cadena con el nombre del evento y los siguientes parámetros son datos adicionales:

.trigger('foo', [1, 2]);

.on('foo', function(event, one, two) { ... });

Un agradecimiento especial por Rocket Hazmat

Ejemplo:

var controller = {
  listen: function (event, json, string) {}
};

$('body').trigger('this_works', [{data: [1, 2, 3]}, 'something']);

$('body').on('this_works', function (event, json, string) {
  controller.listen(event, json, string);
});

Remoto parcial:

Por favor, no lo utilice de esta forma. Hay muchos artículos sobre este problema en la red. Esto lleva mucho tiempo y genera tráfico innecesario en la red. Utilice esta forma:

var template = $('#templates #example_template').detach();
var clone = template.clone();
clone.find('.some_field').val('new_data');
clone.attr('id', null);
$('table tbody').append(clone);
Eraden
fuente
11
No exactamente. .triggersolo toma 2 argumentos. Debe pasar una matriz (u objeto) de parámetros.
Rocket Hazmat
¿Cuál sería la sintaxis correcta si quisiera separar el enlace de eventos del controlador de eventos como en mi ejemplo?
user517406
¿Puede dar un ejemplo de sintaxis? El uso de esta sintaxis no funciona: EVENT BINDING $ (window) .on ('onPartialRendered', onPartialRendered (p1, p2)); EVENT HANDLER var onPartialRendered = function (p1, p2) {...}
user517406
2
@ user517406 Esa es la forma totalmente incorrecta de pasar una referencia de función como un controlador de eventos. Agregue los parámetros donde está definiendo la función. var onPartialRendered = function (event,one,two) {
Kevin B
2
Simplemente cambie el disparador a esto: $ ('cuerpo'). Disparador ({tipo: 'this_works', datos: [1,2,3], mensaje: 'algo'}) ;. El controlador aún puede tener una función (evento) y obtener los parámetros indicando event.data y event.message.
Linnium