Blok z komponenty se nevkládá kam má
- theacastus
- Člen | 81
Zdravím,
mám formulářovou komponentu a speciální šablonu pro něj
{form createFTPUserForm class => 'form-horizontal input-group-spacing'}
<div class="form-errors" n:if="$form->hasErrors()">
<p class="text-danger" n:foreach="$form->errors as $error"><strong>{$error}</strong></p>
</div>
<div class="input-group">
{label tarif class => 'input-group-addon btn-addon-primary tarif-select' /}
{input tarif class => 'form-control'}
<span class="help-block"></span>
</div>
<div class="text-info">Volných FTP účtů: <span id="ftp-free" class="db-count-num"></span></div>
<div class="input-group">
{label user class => 'input-group-addon btn-addon-primary' /}
<span class="input-group-addon btn-addon-default">{$userPrefix}_</span>
{input user class => 'form-control'}
<span class="help-block"></span>
</div>
<div class="input-group">
{label password class => 'input-group-addon btn-addon-primary' /}
{input password class => 'form-control'}
<span class="help-block"></span>
</div>
<div class="input-group">
{label passwordVerify class => 'input-group-addon btn-addon-primary' /}
{input passwordVerify class => 'form-control'}
<span class="help-block"></span>
</div>
<div class="input-group">
{label dir class => 'input-group-addon btn-addon-primary' /}
{input dir class => 'form-control'}
<span class="help-block"></span>
</div>
<div class="input-group pull-right">
{input submit class => 'btn btn-success'}
</div>
{/form}
{block additional_scripts}
<script>
var limits = [];
{foreach $packageLimits as $key => $limit}
limits[{$key}] = {$limit['free_ftps']};
{/foreach}
</script>
<script n:syntax="off">
function setCurrentLimit()
{
$('#ftp-free').text(limits[$('.tarif-select').val()]);
}
window.onload = setCurrentLimit();
$('.tarif-select').on('change', setCurrentLimit());
</script>
{/block}
A potřebuji aby blok additonal_scripts
se vložil do
@layout.latte
, nakonec kam má:
.
.
.
<div class="content-wrap">
{include content}
</div>
</div>
</div>
</div>
{else}
{include content}
{/if}
{block scripts}
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://nette.github.io/resources/js/netteForms.min.js"></script>
<script src="{$basePath}/js/nette.ajax.js"></script>
<script src="{$basePath}/js/confirm.ajax.js"></script>
<script src="{$basePath}/js/bootstrap.min.js"></script>
<script src="{$basePath}/js/particles.min.js"></script>
<script src="{$basePath}/js/main.js"></script>
<script>
$(function () {
$.nette.ext('init').linkSelector = 'a[data-ajax]';
$.nette.ext('init').formSelector = 'form[data-ajax]';
$.nette.init();
});
</script>
{/block}
{ifset additional_scripts}
{include additional_scripts}
{/ifset}
</body>
</html>
Avšak blok je vložen hned za formulář jak je definováno v šabloně a tam ještě není načtené jQuery atp. takže JS část spadne :-/
Nevíte někdo čím by to mohlo být ? Je možné že layout nezná daný blok, když je v komponentě a proto jej vykreslí rovnou na místě?
Díky
- David Matějka
- Moderator | 6445
Je možné že layout nezná daný blok, když je v komponentě a proto jej vykreslí rovnou na místě?
ano, presne tak. sablony komponenty jsou zcela oddelene a nevedi nic o sablone presenteru (a tedy ani o layoutu)
- theacastus
- Člen | 81
David Matějka napsal(a):
Je možné že layout nezná daný blok, když je v komponentě a proto jej vykreslí rovnou na místě?
ano, presne tak. sablony komponenty jsou zcela oddelene a nevedi nic o sablone presenteru (a tedy ani o layoutu)
A jak to tedy vyřešit ?
Musím si dát blok se scripty místo do komponenty do každého templatu presenteru kde chci komponentu použít? Nešlo by to nějak lépe ?
- Gappa
- Nette Blogger | 209
Já to řeším tak, že si jednotlivé scripty vkládám do „stack“, který danou anonymní funkci buď ihned spustí, nebo jen uloží do pole a spustí, jakmile vím, že jsou načtené potřebné knihovny.
Inspiroval jsem se v GA/Nittro:
Takže se pak můžou knihovny načítat asynchronně a js kód může být u komponenty :)