Pokud není jquery naincludováno přímo v komponentě, nezavolá se document ready
- microcz
- Člen | 62
Měl jsem za to (prosím o opravení pokud se pletu), že pokud moje komponenta (potomek Control) používá ve své latte šabloně javascript/jquery z nějakých „js“ souborů, tak stačí když tyto soubory includuju v šabloně, která komponentu používá, tedy:
- komponenta.latte potřebuje cosi.js
- já includnu cosi.js až v neco.latte
- v neco.latte použiju komponentu „komponenta“
Narazil jsem ale na problém s jquery, pakliže ve svém komponenta.latte
nemám:
<script src="{$basePath}/js/jquery/jquery.min.js"></script>
Tak se při použití komponenty v neco.latte nezavolá
$(document).ready(function() { alert('pokus'); });
(umístěná
v komponenta.latte) a to i přesto, že je jquery naincludováno
v neco.latte
Docela mě to štve, protože pak stačí když komponentu použiju v rámci jedné šablony n-krát a hned mám naincludováno n+1 jquery na jedné stránce :( Poradíte?
Editoval microcz (16. 5. 2014 10:50)
- David Kudera
- Člen | 455
Jen možná hloupá kontrolní otázka. Je jquery vložené před samotnou komponentou?
- microcz
- Člen | 62
sakren napsal(a):
Jen možná hloupá kontrolní otázka. Je jquery vložené před samotnou komponentou?
Ano je
Šablona, kde se používá komponenta:
{block styles}
{include parent}
<link rel="stylesheet" href="{$basePath}/css/jquery.jqplot.css">
{/block}
{block scripts}
{include parent}
<script src="{$basePath}/js/jquery/jquery.min.js"></script>
<script src="{$basePath}/js/jquery/jquery.jqplot.js"></script>
<script src="{$basePath}/js/jquery/plugins/jqplot.dateAxisRenderer.min.js"></script>
<script src="{$basePath}/js/jquery/plugins/jqplot.canvasTextRenderer.min.js"></script>
<script src="{$basePath}/js/jquery/plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
<script src="{$basePath}/js/jquery/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
<script src="{$basePath}/js/jquery/plugins/jqplot.json2.min.js"></script>
<script src="{$basePath}/js/confirmations.js"></script>
{/block}
{block content}
<div id="wrap">
...
<div class="right">{control pricePlot}</div>
...
</div>
{/block}
Šablona komponenty
<script type="text/javascript">
$(document).ready(function() {
// Plot data renderer
var ajaxDataRenderer{$code|noescape} = function(url, plot, options) {
var ret = null;
$.ajax({
async: false,
url: url,
type: "GET",
dataType:"json",
success: function(data) {
ret = data;
},
error:function (xhr, ajaxOptions, thrownError) {
alert(xhr.responseText);
}
});
return ret;
};
// Axes configuration for all plots
var axesCfg{$code|noescape} = {
xaxis:{
autoscale: true,
label: {$xLabel},
renderer: $.jqplot.DateAxisRenderer,
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
labelOptions:{
fontSize: '14pt'
},
tickOptions: {
angle: 30,
formatString:'%b %#d'
}
},
yaxis:{
autoscale: true,
label: {$yLabel},
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
labelOptions:{
fontSize: '14pt'
},
tickOptions: {
labelPosition: 'middle'
}
}
};
// Link to chart data
var link{$code|noescape} = {link LoadDataJson!}
// Chart
$.jqplot('plot{$code|noescape}', link{$code|noescape}, {
dataRenderer: ajaxDataRenderer{$code|noescape},
axes: axesCfg{$code|noescape}
});
});
</script>
<div id='plot{$code|noescape}' style='height:{$height}px; width:{$width}px;'>
</div>
<div class='code prettyprint'>
<pre class='code prettyprint brush: js'></pre>
</div>
Toto nefunguje, ale pokud zkopíruju jquery do šablony komponenty, vše funguje správně
Editoval microcz (17. 5. 2014 11:03)
- Michal Vyšinský
- Člen | 608
A vkládáš v layoutu ty bloky styles a scripts? Nemáš zobrazenou nějakou chybu v konzoli? Když se podíváš to zdrojáků (CTRL+U) – jsou tam ty skripty?