Problém se zobrazením náhledu

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

Dobrý den,
zkouším si napsat jednoduchý redakční systém. Při zakládání článku bych chtěl uživateli nabídnout možnost zobrazení náhledu jeho článku, protože používám texy. Bohužel se mi nechce překreslit snippet.
latte:

{snippet show}
        {if $show === false}
            <label for="inputContent" class="sr-only">{_form.article.content}</label>
            <textarea n:name=content id="inputContent" class="form-textArea" placeholder="{_form.article.content}" required=""></textarea>
        {else}
            <div class="form-textArea">
                {$show|texy|noescape}
            </div>
        {/if}
    {/snippet}

presenter:

function handleShow($text)
{
    $this->template->show = $text;
    $this->redrawControl('show');
}

function handleEdit()
{
    $this->template->show = false;
    $this->redrawControl('show');
}

function renderCreate()
{
    $this->template->show = false;
}


function actionCreate()
{
    if(!$this->user->isAllowed('article', 'write'))
        $this->redirect('Homepage:');
}

js, který se zavolá při kliku na button

function show(){
    $.nette.ajax({
        type: "POST",
        dateType: "json",
        url: {link show!},
        data: { text: $('#inputContent').val() }
    });
}

Problém je v tom, že se mi při kliku na button nepřekreslí snippet show, takže uživatel nevidí svůj náhled.
Mohli byste mi prosím poradit?

David Matějka
Moderator | 6445
+
+1
-

viz zivotni cyklus presenteru, render metoda se vola po handle, takze ty tam tu hodnotu prepises

Zuben45
Člen | 268
+
+1
-

Seš si jistý, že se nepřekreslí ? Jelikož nastavuješ stejnou hodnotu kterou posíláš:

function handleShow($text)
{
    $this->template->show = $text;
    $this->redrawControl('show');
}

Kontroluješ v presenteru, jestli show pro template je již nastaven ?

Class ArticlesPresenter extends BasePresenter
{
	public function renderCreate()
	{
		if (!isset($this->template->show)) {
			$this->template->show = 'defaultni při spuštění';
		}
	}
}

EDIT: @DavidMatějka byls rychlejší :)

Editoval Zuben45 (26. 7. 2017 16:28)

Jan Blažek
Člen | 36
+
0
-

Mohl bych váš otravovat ještě s jednou drobností?
Když se chci přepnout zpět do editace, tak mi vyskočí chyba:

if ($show === false) {
116:                ?>            <label for="inputContent" class="sr-only"><?php echo LR\Filters::escapeHtmlText(call_user_func($this->filters->translate, "form.article.content")) ?></label>
117:                <textarea id="inputContent" class="form-textArea" placeholder="<?php echo LR\Filters::escapeHtmlAttr(call_user_func($this->filters->translate, "form.article.content")) ?>" required=""<?php
118:                $_input = end($this->global->formsStack)["content"];
119:                echo $_input->getControlPart()->addAttributes(array (
120:                'id' => NULL,

na řádku 108 s hláškou:
„end() expects parameter 1 to be array, null given“
EDIT: řádek 118 :)

Editoval Jan Blažek (26. 7. 2017 20:33)

Zuben45
Člen | 268
+
0
-

Jan Blažek napsal(a):

if ($show === false) {
116:                ?>            <label for="inputContent" class="sr-only"><?php echo LR\Filters::escapeHtmlText(call_user_func($this->filters->translate, "form.article.content")) ?></label>
117:                <textarea id="inputContent" class="form-textArea" placeholder="<?php echo LR\Filters::escapeHtmlAttr(call_user_func($this->filters->translate, "form.article.content")) ?>" required=""<?php
118:                $_input = end($this->global->formsStack)["content"];
119:                echo $_input->getControlPart()->addAttributes(array (
120:                'id' => NULL,

na řádku 108 s hláškou:
„end() expects parameter 1 to be array, null given“

hláška říká že jsi místo pole, dostal null, píšeš že se jedná o řádek 108, ale v ukázaném kodu tento řádek nemáš ;)