řešení nette.ajax.js a callbacky volané po akci na daném prvku

mcmatak
Člen | 505
+
0
-

řešil jsem pořád jak volat akci po zpracované ajax operaci, po překreslení snippetu apod., třeba se Vám pak ještě hodí provést nějakou javascript akci, třeba nechcete nějaký náročný blok překreslovat snippetem, ale uděláte jednoduchou úpravu javascriptem, tady je moje řešení

týká se tohoto dotazu
https://forum.nette.org/…jax-s-jquery?p=11

co vy na to?
BasePresenter.php

<?php
	public function payloadCallback($selector, $trigger, $data = array())
	{
		if (!isset($this->payload->callbacks)) {
			$this->payload->callbacks = array();
		}

		$this->payload->callbacks[] = array(
									'selector' => $selector,
									'trigger' => $trigger,
									'data' => $data,
								);
	}

?>

nette.ajax extension

<script>
	$.nette.ext('callbacks', {
		success: function(payload) {
			if (payload.callbacks) {
				$.each(payload.callbacks, function (i, callback) {
					var el = $('#' + callback.selector);
					el.trigger(callback.trigger, [callback.data]);
				});
			}
		}
	});
</script>

definice callbacku v default.latte

<script type="text/javascript">
					jQuery(document).ready(function($) {
						$('#grd-gridControl').on('read', function(e, data) { $.fn.helpdesk.read($(e.target), data.idMessage); });
					});
</script>

a pak vyvolání triggeru v handleru presenteru

<?php
$this->payloadCallback($this['gridControl']->getHtmlId(), 'read', array('idMessage' => $message->id));
?>
RSS tématu Téma zavřeno