občas nefungují n: atributy

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

Funguje:

<div>
	{if !$user}
		</li>
	{/if}
</div>

Nefunguje:

<div n:if="!$user">
	</li>
</div>

člověk očekává že {if} a n:if bude fungovat stejně.
narazil jsem na to při generování tree menu a tam to prostě dle mého jinak udělat nejde.

Blizzy
Člen | 149
+
0
-

Mám takový pocit, že n:if obalí div ifem, tedy je ekvivalentní tomuto:

{if !$user}
<div>
    </li>
</div>
{/if}

Pro vnořený if by měl fungovat atribut n:inner-if.

Foowie
Člen | 269
+
0
-
<div n:if="!$user">
        </li>
</div>

Je stejné jako

{if !$user}
	<div>
		</li>
	</div>
{/if}

To co hledáš je

<div n:inner-if="!$user">
        </li>
</div>
pEeLL
Člen | 23
+
0
-

Blizzy, Foowie

to je hezke ale nic to nemění na tom že

nefunguje

<div n:if="!$user">
        </li>
</div>

stejne tak nefunguje ani toto

<div n:inner-if="!$user">
        </li>
</div>

a verze s {if} fungují.

nAS
Člen | 277
+
0
-

Ono je to poměrně logické. Aby Nette vědělo, s jakým konečným tagem má n: atribut spojit, tak je potřeba aby bylo html validní. Pokud validní není (což to tvé není), tak nelze jednoznačně rozhodnout, kde má podmínka končit a proto to nelze zapsat pomocí n: atributů. Pokud tedy opravdu potřebuješ nevalidní html, tak musíš použít syntaxi se složenými závorkami.

pEeLL
Člen | 23
+
0
-

nAS:

Diky za vysvětlení.

ale i tak by to mohlo vědět že pokud if začal v divu tak na ukončení potřebuje opět div a díky tomu by mohly byt ostatni prvky nevalidni. ale asi je pravda že tohle řešit by byl opruz.

Editoval pEeLL (24. 8. 2010 13:26)

David Grudl
Nette Core | 8228
+
0
-

Otázka je, co by mělo udělat třeba tohle:

<li n:if="$user">
<div n:inner-if="!$user">
        </li>
</div>

Validita rulez ;)