JavaScript: JSON-weergave en 'this'-context
Inleiding: json-weergave in mvc
Dit artikel behandelt een handige techniek om JSON-data rechtstreeks vanuit je applicatie te retourneren, zonder de noodzaak van traditionele views en layouts. Vaak wil je in een actie simpelweg een JSON-object retourneren. In plaats van de gebruikelijke aanpak met autorenderen en echo json_encode(), wat niet stroef loopt met de MVC-architectuur, introduceren we de JsonView-klasse. Deze klasse zorgt voor een schone en gestructureerde manier om JSON-data te genereren.
De jsonview-klasse
De JsonView-klasse kan worden gedefinieerd in het bestand app/views/json.php. Het is een uitbreiding van de standaard View-klasse en neemt een JSON-object als content. De constructor controleert of er JSON-data beschikbaar is in de viewVars van de controller en zet deze als content. De render()-methode encodeert de content naar JSON en retourneert deze. Dit versnelt de ontwikkeling en houdt de code overzichtelijk.
Gebruik in een actie
Om de JsonView te gebruiken, stel je de view property van de controller in op 'json' en definieer een JSON-object in de viewVars. Bijvoorbeeld: $this->view="json"; $json = array('myobject' => true, 'mvc' => 'not broken'); $this->set(compact($json));. De render()-methode zal vervolgens dit object omzetten naar een JSON-string, die als resultaat van de actie wordt geretourneerd. Dit is een eenvoudige maar effectieve manier om JSON-data te genereren in je applicatie.
'This' context met 'apply' en 'call'
Een veelvoorkomend probleem in JavaScript is het begrijpen van de 'this'-context binnen functies en methoden. De methoden apply en call van een Function-object bieden een manier om de waarde van this expliciet te definiëren. Ze stellen je in staat om een functie uit te voeren met een specifieke this-waarde. Dit is vooral handig bij het werken met objecten en het overerven van methoden.
Voorbeeld van 'apply' en 'call'
Het volgende voorbeeld demonstreert hoe apply en call werken. We maken twee objecten, car en person, elk met hun eigen getName()-methode. We roepen getName() aan voor beide objecten, wat de verwachte resultaten oplevert. Vervolgens gebruiken we test1 en test2 op het person-object om getName() op het car-object aan te roepen, waarbij de this-context van person wordt doorgegeven. Dit resulteert in onverwachte, maar illustratieve resultaten.
Jquery: controleren op elementen
Wanneer je met jQuery werkt, is het belangrijk om correct te controleren of een element bestaat. De natuurlijke neiging is om var x = $('.some-element'); if(x) {.} te gebruiken. Echter, x is altijd een jQuery-object, zelfs als het element niet bestaat. De juiste manier om te controleren of een element bestaat, is door de length-property van het jQuery-object te gebruiken: var x = $('.some-element'); if(x.length) {.}. De length-property geeft het aantal gevonden elementen weer.
