Formular pre pridavanie komentarov, AJAX ako?

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

Ahoj,

potreboval by som radu, uz neviem ako ten ajax rozchodit :) Mam niaky article a pod nim mam comment form + komentare, chcel by som po vlozeni komentara form vyprazdnit a aktualizovat iba komentare s tym ze by som neprekresloval stranku, skusal som to podla tohoto : https://pla.nette.org/…ivajici-ajax#…

Nalinkovane scripty mam v hlavnom layoute :

<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>

Takze : commentForm component =>

public function createComponentCommentForm($name) {
    $form = new Form($this, $name);
    $form->getElementPrototype()->class('ajax');
    $form->addTextArea('text', 'Komentár :')
            ->addRule(Form::FILLED, 'Nemožeš pridať prázdny komentár');
    $form->addSubmit('send', 'Odoslať');
    $form->onSuccess[] = callback($this, 'commentFormSubmitted');
    return $form;
}

Obslusna metoda :

public function commentFormSubmitted(Form $form) {
        $data = $form->getValues();
        $data['written'] = new DateTime();
        $data['article_id'] = $this->getParameter('id');
        $data['user_id'] = $this->getUser()->getId();

        $this->commentRepository->insertComment($data);

        $this->flashMessage('Komentár uložený!');
        if (!$this->isAjax())
            $this->redirect('this');
        else {
            $this->invalidateControl('comments');
            $this->invalidateControl('commentForm');
            $form->setValues(array(), TRUE);
        }
    }

Sablona :

<div id = "article">
    <h2>{$article->subject}</h2>
    <p>{$article->text|noescape}</p>
    <p align="right"> Publikované : <b>{$article->written|date:'j. n. Y'}</b><br>
        Autor : <b>{$article->user->name}</b><br>
        <a href="javascript:changeVisibility('comments');"><span>Komentáre</span></a></p>
<!--        <a href="#" id="link" onclick="changeVisibility('comment');"><span>Print Directions</span></a><p>-->

</div>
{block #comments}

{snippet commentForm}
    {if $isLoggedIn}
        {control commentForm}
    {else}
        <strong>Po prihlásení budeš mocť komentovať aj ty :), tak šup šup.</strong>
    {/if}
    {/snippet}
    {snippet comments}
        <div class="comments" id ="comments" style="display:block;">
            <h3>Komentáre : </h3>
    {foreach $flashes as $flash}
        <div class="flash {$flash->type}">{$flash->message}</div>
    {/foreach}

    {foreach $comments as $comment}
        <b>{$comment->user->username} | {$comment->written|date:'j. n. Y,  h:i'} | {$comment->user->name} </b>
        <br>
        {$comment->text}
        <hr>
    {/foreach}

    </div>
    {/snippet}
    {/block}

Ked som pustil ladenku debug tak $this->isAjax() vracia false .. proc ?
Nette a celkove webove aplikace sa ucim :) .. takze prosim nie moc tvrdo namna

Dik

honos
Člen | 109
+
0
-

Nalinkovane scripty mam v hlavnom layoute :

<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>

Pokud pouzivaš javascript pro Nette co jeste pouziva udalost $.live ale mas nalinkovanou novějši verzi JQuery co udalost $.live jiz nepouziva tak ten formular se odesle bez AJAX. zkus projit script jquery.nette.js a dokumentaci k tvoji verzi JQuery. Ja jsem bylo jako nahradu za $.live pouzil $.delegate.

EDIT: Koukni se do ladenky zda ti JS hazi chybu..

EDIT II: podivej se sem

Editoval honos (9. 1. 2014 12:22)

azicko
Člen | 7
+
0
-

honos napsal(a):

Nalinkovane scripty mam v hlavnom layoute :

<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.ajaxform.js"></script>

Pokud pouzivaš javascript pro Nette co jeste pouziva udalost $.live ale mas nalinkovanou novějši verzi JQuery co udalost $.live jiz nepouziva tak ten formular se odesle bez AJAX. zkus projit script jquery.nette.js a dokumentaci k tvoji verzi JQuery. Ja jsem bylo jako nahradu za $.live pouzil $.delegate.

EDIT: Koukni se do ladenky zda ti JS hazi chybu..

EDIT II: podivej se sem

Ahoj,
dakujem ti ..idem to hned vyskusat ..diky za radu