Pokud není jquery naincludováno přímo v komponentě, nezavolá se document ready

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

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
+
0
-

Jen možná hloupá kontrolní otázka. Je jquery vložené před samotnou komponentou?

microcz
Člen | 62
+
0
-

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
+
0
-

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?

microcz
Člen | 62
+
0
-

AHA, Sice

  • Bloky styles a scripts v layoutu jsou
  • Ve zdrojácích skripty jsou všude tam kde mají být

Ale

  • v layoutu jsem měl chybný jquery script, který házel chybu do konzole :o)

Díky moc