ř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
ř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));
?>