Nefunkční skripty po ajax překreslení

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

Ahoj,

posnažím se to shrnout co nejrychleji. Kliknu na odkaz, po kterém mi vyskočí modal. V modalu mám input s datepickerem od bootstrapu. Když přepnu na jiné datum, provede se ajax, snippet se překreslí. Ale pokud chci znovu přepnout na jiné datum, datepicker se ani nezobrazí. Budu rád za každou radu! Díky :-) Nette používám nejnovější verzi.

Layout.latte

{snippet diary}
               {form diaryForm, class => 'form-materialize form-materialize-third ajax'}
               <fieldset>
                   <div class="form-materialize-holder">
                       <div class="input-holder holder-materialize">
                           {label date, class => 'label-materialize-second' /}
                           <input n:name="date" value="{ifset $date}{$date}{/ifset}" class="input-materialize-second dtpicker" />
                       </div>
                       {if !$diaryBlocked}
                           <div class="input-holder holder-materialize">
                               {label question_1, class => 'label-materialize-second' /}
                               {input question_1, class => 'input-materialize-second select'}
                           </div>
                           <div class="input-holder holder-materialize">
                               {label question_2, class => 'label-materialize-second' /}
                               {input question_2, class => 'input-materialize-second textarea'}
                           </div>
                           <div class="input-holder holder-materialize">
                               {label question_3, class => 'label-materialize-second' /}
                               {input question_3, class => 'input-materialize-second select'}
                           </div>
                           <div class="input-holder holder-materialize">
                               {label question_4, class => 'label-materialize-second' /}
                               {input question_4, class => 'input-materialize-second textarea'}
                           </div>
                       </div>

                       <button type="submit" n:name="send" class="button button-block button-default button-uppercase">
                           <span>Vyplnit</span>
                       </button>
                       {else}
                           <p>Děkujeme. Přijďte zase zítra.</p>
                       {/if}
                   </fieldset>
               {/form}
           {/snippet}

Patička:

{block scripts}
	<script src="{$basePath}/js/main.min.js"></script>
{/block}

Ajax v main.min.js:

initAjaxRefresh: function() {
        $.nette.ajax({
            type: 'GET',
            url: '?do=refreshDate',
            data: {
                'date': $('.dtpicker').val()
            },
            error: function() {
                console.warn("An error with AJAX.");
            }
        });
    }

BasePresenter:

public function handleRefreshDate($date) {
        if ($this->isAjax()) {
            $userId = json_decode($this->httpRequest->getCookie('user'))->id;
            $isExist = $this->diary->isCreate($userId, date('Y-m-d', strtotime($date)));

            if ($isExist) {
                $this->template->diaryBlocked = true;
            } else {
                $this->template->diaryBlocked = false;
            }

            $this->template->date = $date;
            $this->redrawControl();
        }
    }
tomfz6
Člen | 32
+
+2
-

čau od boku to bude chtít znova udělat init toho datepicker-u,teoreticky by jsi na test mohl dát do toho snipetu toto

<script>
$( function() {
    $( ".dtpicker" ).datepicker();
  } );
</script>

(uprav si to podle toho jaký přesně používáš ten DT) ale je to trochu na prase.

Bylo by to lepší udělat přes rozšíření $.nette.ext

<script>
$.nette.ext('dt', {
    load: function () {
	 	$( ".dtpicker" ).datepicker();
	}
});
</script>

Píšu to zhlavy bez testu.

Editoval tomfz6 (11. 7. 2017 11:03)