Ik ben redelijk noob met Javascript en probeer op het moment een simpele RSS reader te maken met jQuery. Op de achtergrond een PHP proxy ivm cross-site-scripting maatregelen van een aantal browsers, maar dit is nu voor mijn code nog niet echt relevant.
Ik probeer mijn javascript een beetje mooi in te delen, met de functionaliteiten van een RSS feed in een klasse, zodat ik makkelijk meerdere feeds op een pagina kan hebben. Het probleem waar ik nu tegen aan loop is dat jQuery bijna alles met anonieme functies doet, en ik dan moeilijk terug naar het feed object kan refereren.
Een heel simpel voorbeeld is van de code die ik nu probeer in een klasse te krijgen is de volgende:
Dit werkt, maar hier kan ik weinig mee als ik de resultaten vervolgens in de bijbehorende HTML node wil gieten. Ook wil ik meerdere gegevens aan een specifiek feed object koppelen, zoals in dit geval de url, de laatste update, etc. De hele referentie van een eventueel parent object is weg zo gauw de anonieme functie in each() wordt aangeroepen. Mijn idee was dus om ipv een functie inline te definiëren, deze functie in mijn klasse te definiëren:
Echter nu geeft de code in feed.refesh een error, omdat de variable xml niet meer bekend is (deze word in het eerste voorbeeld gewoon gemaakt door $.get en netjes doorgegeven). Hoe kan ik jQuery dan wél netjes in een klasse gebruiken?
Ik probeer mijn javascript een beetje mooi in te delen, met de functionaliteiten van een RSS feed in een klasse, zodat ik makkelijk meerdere feeds op een pagina kan hebben. Het probleem waar ik nu tegen aan loop is dat jQuery bijna alles met anonieme functies doet, en ik dan moeilijk terug naar het feed object kan refereren.
Een heel simpel voorbeeld is van de code die ik nu probeer in een klasse te krijgen is de volgende:
JavaScript:
1
2
3
4
5
6
| $.get("mixed.xml", {}, function(xml) { $("item", xml).each(function(i) { // hier verwijst this dus naar de resultset van de jQuery functie alert($(this.find('title').text())); } } |
Dit werkt, maar hier kan ik weinig mee als ik de resultaten vervolgens in de bijbehorende HTML node wil gieten. Ook wil ik meerdere gegevens aan een specifiek feed object koppelen, zoals in dit geval de url, de laatste update, etc. De hele referentie van een eventueel parent object is weg zo gauw de anonieme functie in each() wordt aangeroepen. Mijn idee was dus om ipv een functie inline te definiëren, deze functie in mijn klasse te definiëren:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| var feed = function() { this.feedUrl = "mixed.xml"; this.refresh = function() { // de variable 'xml' word nu ineens niet meer door $.get doorgegeven? $.get(this.feedUrl, {}, this.handleRSS(xml)); } this.handleRSS = function (xml) { $("item", xml).each(function(i) { alert($(this.find('title').text())); }); } } |
Echter nu geeft de code in feed.refesh een error, omdat de variable xml niet meer bekend is (deze word in het eerste voorbeeld gewoon gemaakt door $.get en netjes doorgegeven). Hoe kan ik jQuery dan wél netjes in een klasse gebruiken?
[ Voor 3% gewijzigd door Verwijderd op 29-11-2008 14:11 ]