invalidateControl() – prosim o vysvetleni

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MW
Člen | 626
+
0
-

Zdravím a prosím o malé objasnění.

Mám v šabloně dva snippety. Jeden pro formulář a druhy pro data vypsaná pod ním.

V onom formuláři mám kus javascriptu, protože se jedná o TinyMCE a bez umistění do snippetu se me vůbec při invalidaci nevykreslil. Problém nastal, když jsem odeslal formulářem data a invalidoval jak data tak i formulář, formulář se uz vykreslil, ale nedalo se do nej zapisovat.. nebyl jakoby inicializovany i přes to, ze jsem invalidoval potrebny javascript.

Našel jsem jediné řešení a to použít

$this->invalidateControl(); // tedy bez parametru

Nemuzu ale najit nejake vysvetleni, proc invalidate obou snipetu v sablobe nepohohla. Co dela invalidace bez parametru navíc?

Děkuji

Tady je kod:

<div id="tabs-2">


	    <div>
		<button type="button" class="btn btn-primary btn-xs" data-toggle="collapse" data-target="#unexposed">
		    <span class="glyphicon glyphicon-plus"></span> Nový záznam
		</button>

		<div id="unexposed" class="collapse">
		    <div n:snippet="detailform">
			<h2>Nová poznámka</h2>

			{control contractsDetailForm}

			    <script type="text/javascript" src="{$basePath}/js/tiny_mce/tinymce.min.js"></script>
			    <script type="text/javascript">
				tinymce.init({
				    selector: ".editarea",
				    language: "cs",
				    height: 150,
				    width: 1000,
				    entity_encoding: "raw",
				    plugins: [
					"advlist autolink lists link image charmap print preview anchor",
					"searchreplace visualblocks code fullscreen",
					"insertdatetime media table contextmenu paste"
				    ],
				    toolbar: "insertfile undo redo | styleselect | bold italic | link image | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"
				});
				$('html, body').animate({ scrollTop: 0 }, 'slow');
			    </script>

			{if $show}
			    <script type="text/javascript">
				$('#unexposed').collapse('show');
			    </script>
			{else}
			    <script type="text/javascript">
				$('#unexposed').collapse('hide');
			    </script>
			{/if}

		    </div>
		</div>
	    </div>


	    <div n:snippet="details">
		{foreach $details as $detail}

		    <div class="bs-callout bs-callout-info">
			<p>
			<span style="float:right;">Vložil: <b><i>{$detail->users->name}</i></b></span>
			<h3><a href="#detail-{$detail->id}" name="detail-{$detail->id}" data-toggle="collapse" data-target="#detail-{$detail->id}">{$detail->title}</a></h3>


			<div id="detail-{$detail->id}" class="collapse">
			{!$detail->detail}<br /><br />
			<span style="float:right; text-align: right;">

			    <a n:href="edit! detailid => $detail->id, show => 1" class="ajax btn btn-success btn-xs">upravit</a>
			<a n:href="deleteDetail! detailid => $detail->id" class="btn btn-danger btn-xs"
			   data-confirm="modal"
			   data-confirm-title="Potvrzení akce"
			   data-confirm-text="Opravdu smazat novinu {$detail->title}?"
			   data-confirm-ok-class="btn-danger"
			   data-confirm-ok-text="Smazat"
			   data-confirm-cancel-class="btn-success"
			   data-confirm-cancel-text="Zrušit"
			   class="btn btn-danger btn-mini"
			   data-ajax="on">smazat</a>
			</span><br />
			</div>
			</p>
		    </div>
		{/foreach}
	    </div>



    </div>
amik
Člen | 118
+
0
-

invalidateControl() invaliduje všechny snippety control, na které je zavolán.
Jak vypadá tvoje PHP? voláš invalidateControl() z presenteru?

  • zkontroluj, zda v odpovědi AJAXového požadavku ten snippet chodí. Každý rozumný prohlížeč má dnes nějakou konzoli, kde jsou vidět AJAX requesty a odpovědi stránky.
  • když se HTML formuláře znovu natáhne AJAXem, je potřeba TinyMCE incializovat znovu. Pokud používáš nette.ajax.js, použij toto:
<script>
$.nette.ext('nejakyNazev', {
  load: function() {
    //tady zavolej inicializaci tinymce
  }
}, {});
</script>

Tohle se zavolá jen jednou při načtení stránky, a tím se po každém ajax requestu provede inicializace tinymce. Hlavně nedotahuj javascripty AJAXem, to vůbec není pěkné řešení.

MW
Člen | 626
+
0
-

Dekuji za odpověď i za radu!

Ano, v presenteru invaliduju vždy v prislusnem handlu.
Snippety se prave invalidovaly.. to vim, protože jsem tam mel třeba vyprazdneni formulare… ale něco tomu práve chybelo a ja nevim co :)

Editoval MW (25. 11. 2014 15:10)