[JS] Objectnaam in var

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het schrijven van een validatie plugin. Ik wil de plugin zo gaan aanroepen:
JavaScript:
1
2
3
4
5
6
$('#formTest').validate ({
   objectnaam: {
    lol: 1
   }

});

objectnaam wordt het naam of de id van het veld. Ik wil nu in de plugin de objectnaam in een var hebben, hoe kan ik dit het beste doen?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Waarschijnlijk bedoel je zoiets:

JavaScript:
1
2
3
4
5
6
7
8
function validate(data) {
  for(var j in data) {
    // Op dit moment is j=="objectnaam", data[j]=={lol:1}
    for(var k in data[j]) {
       // Op dit moment is k=="lol" en data[j][k]==1
    }
  }
}


Let op, aan deze constructie zitten een aantal haken en ogen. Zo kunnen er allerlei andere properties worden meegenomen via prototypes die je niet wil hebben (te ondervangen door eerst isOwnProperty(j) aan te roepen om te checken of het echt een property op het object is) en is de volgorde van de items ongedefinieerd. Maar ik vermoed dat dat in dit geval niet zoveel uitmaakt.

Acties:
  • 0 Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 24-08 23:40

Killemov

Ik zoek nog een mooi icooi =)

MisterData schreef op dinsdag 15 februari 2011 @ 09:20:
Waarschijnlijk bedoel je zoiets:

JavaScript:
1
2
3
4
5
6
7
8
function validate(data) {
  for(var j in data) {
    // Op dit moment is j=="objectnaam", data[j]=={lol:1}
    for(var k in data[j]) {
       // Op dit moment is k=="lol" en data[j][k]==1
    }
  }
}


Let op, aan deze constructie zitten een aantal haken en ogen. Zo kunnen er allerlei andere properties worden meegenomen via prototypes die je niet wil hebben (te ondervangen door eerst isOwnProperty(j) aan te roepen om te checken of het echt een property op het object is) en is de volgorde van de items ongedefinieerd. Maar ik vermoed dat dat in dit geval niet zoveel uitmaakt.
Het is sterk af te raden om iteraties over objecten (in) toe te passen op arrays. Indexen gebruiken voor arrays dus.

Hey ... maar dan heb je ook wat!


  • voodooless
  • Registratie: Januari 2002
  • Nu online

voodooless

Sound is no voodoo!

Killemov schreef op woensdag 16 februari 2011 @ 22:50:
Het is sterk af te raden om iteraties over objecten (in) toe te passen op arrays. Indexen gebruiken voor arrays dus.
Misschien ook handig om even de rede hiervoor te geven :) Je loopt namelijk het gevaar dat je array geen 100% array is. Als er stiekem iets van een functie in zit, dan itereer je daar ook gezellig overheen, met alle vreemde gevolgen van dien.

Over loops is trouwens ook het laatste woord nog niet gesproken. Zie bijvoorbeeld hier over de verschillen in performance van verschillende notaties. Lang leve late binding :w

Do diamonds shine on the dark side of the moon :?


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Killemov schreef op woensdag 16 februari 2011 @ 22:50:
[...]

Het is sterk af te raden om iteraties over objecten (in) toe te passen op arrays. Indexen gebruiken voor arrays dus.
Ik zie hier geen arrays? Hoewel je hier natuurlijk ook zou kunnen kiezen voor bijvoorbeeld een array van objecten.

Verder is er niets mis met het itereren over objecten mbv 'in', zolang je maar in je achterhoofd houdt dat Object.prototype verboten is ;)

Voor arrays is het devies inderdaad om gewoon via de index te itereren (of forEach te gebruiken).

meteen even een schopje naar het juiste forum ;)

[ Voor 12% gewijzigd door crisp op 17-02-2011 09:00 ]

Intentionally left blank


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
Beetje vreemd om voor een variabele property-naam te kiezen. Kies dan voor de property 'objectnaam' waar je het object instopt. Of in dit geval logischer, geef hem gewoon als los argument mee?

JavaScript:
1
2
3
4
5
6
7
8
$('#formTest').validate(
    'formtest',   // of this.id
    {
        lol:    1
    }
);

function validate(objectnaam, config) {}

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

frickY schreef op donderdag 17 februari 2011 @ 09:04:
Beetje vreemd om voor een variabele property-naam te kiezen. Kies dan voor de property 'objectnaam' waar je het object instopt. Of in dit geval logischer, geef hem gewoon als los argument mee?
Ik gok dat hij validatierules voor meerdere objecten (velden) mee wil kunnen geven. Een alternatief zou dit kunnen zijn:
JavaScript:
1
2
3
4
5
6
$('#formTest').validate(
    [
        { fieldname: 'foo', rules: { required: true },
        { fieldname: 'bar', rules: { range: [0, 10] }
    ]
);

Intentionally left blank


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Je kunt ook jQuerys each gebruiken:
JavaScript:
1
2
3
4
5
6
function validate(data)
{
   $.each( data, function(key,value) {
     // key = "objectnaam"
   });
}

Developer Accused Of Unreadable Code Refuses To Comment


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
jQuery each is feitelijk ook niks anders dan een wat intelligentere in-statement. Dat soort variabele data wil je liever als values hebben, niet als keys.

Met crisp dus :)
Pagina: 1