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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mcmatak
Člen | 504
+
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));
?>