Vložení Javascriptu do layoutu

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

Zkoušel jsem už hledat zde na fóru, ale jediné co se blížilo mým požadavkům, bylo v tomto vlákně konkrétně v druhém příspěvku, ale když jsem kód vložil do svého projektu, tak to vypsalo chybu

**InvalidArgumentException**
Invalid argument passed to foreach resp. SmartCachingIterator; array or Iterator expected, NULL given.

A když ten script vložím přímo do @layout.phtml, tak to neprojde. Určitě to není nic náročného a určitě to tu někde už je, jen jsem neměl to stěstí abych to našel :)

Ondrej
Člen | 110
+
0
-

warp napsal(a):
… jen jsem neměl to stěstí abych to našel :)

musíš jít tomu štěstíčku naproti ;) začal bych u zamyšlení se nad tou chybovou hláškou…

warp
Člen | 26
+
0
-

Pokusil sem se kod zjednosudit (snad spravne) a zda se, ze se pole neplni.

Kod v @layout

{* Load JS Scripts *}
{if !empty($jsScripts)}
{foreach $jsScripts as $jsScript}
<script type="text/javascript">
{$jsScript->data}
</script>
{/foreach}
{/if}

Kod v BasePresenteru

protected function addJsScript($data)
        {
                $this->template->jsScripts[] = (object) array('data' => $data);
        }

Kod ve vlastnim presenteru

class BuilderPresenter extends BasePresenter
{
        public function actionDefault()
        {
                $data = 'document.getElementById("dataGrid1").onclick = function ...;';
                $this->addJsScript($data);
        }
}
warp
Člen | 26
+
0
-

Tak jsem zjistil, ze problem neni v poli, ale primo v javascriptu. Zrejme jsem zacal tim nespravnym.

Takze uz mam konkretnejsi problem, tenhle kod:

$().ready(function() {
	$('.jimgMenu ul').kwicks({max: 254, duration: 300, easing: 'easeOutQuad', complete: 'callback'});
	});

neprojde z duvodu:

Filter LatteFilter::__invoke: Unknown macro {max: 254, duration: 300, easing: 'easeOutQuad', complete: 'callback'}

Nejde zaridit, aby Nette tento kus kodu ignoroval nebo nejak preskocil a nesnazil se ho prelozit podle sveho?

HanziQ
Člen | 16
+
0
-

Je tu několik možností:

  1. Za každou { která nemá označovat makro dát mezeru. → { max: .....
  2. Místo { použít {l} a místo } použít {r}
  3. použít {syntax double}{/syntax} → mezi těmito značkami bude potřeba pro použití makra jeho uzavření do {{ a }}, ne jen { a } (lze použít i jako <script type=„text/javascript“ n:syntax=„double“>, pak to bude platit pro celý javascript)

Osobně bych doporučoval 1).