Het probleem is als volgt.
Ik heb een serverside control gemaakt die html uitpoept.
Onderdeel daarvan is dat bepaalde elementen van dat control events moeten gaan afvuren.
Wanneer ik op iets klik wil ik dus een onclick event af laten gaan.
Wanneer ik op save klik bijvoorbeeld wil ik eerst een before_save() en dan een after_save() event triggeren.
Dit moet dan d.m.v. JS.
wanneer dan het moment is aangebroken dat zo'n event moet triggeren kijk ik of bepaalde elementen een attribuut 'before_save' hebben. Die attributen lees ik uit en doe dan (ja ranzig i know) een eval() op de value van dat attribuut.
Dit komt (kort door de bocht) neer op:
nu wil ik echter dat ik in de methode "mijnfunctie()" ook het keyword 'this' kan gebruiken. Dit kan natuurlijk, maar deze is momenteel altijd 'window' omdat eval geen context heeft.
Nu ken ik bind en call en apply, maar krijg het niet voor elkaar om de juiste 'this' mee te geven, en eigenlijk denk ik dat het er op neem komt dat ik de text die ik nu 'evalueer' ook direct uitvoer. Ik wil hem eigenlijk alleen interpreteren en dan een apply() doen met daarin de juiste context meegegeven.
Hoe doet javascript dat zelf?
een onclick="alert(this)" werkt ook gewoon goed. Hoe bouw je DIE functionaliteit.
kort door de bocht is wat ik wil dat ik zelf events kan verzinnen, bijvoorbeeld:
Ik heb een serverside control gemaakt die html uitpoept.
Onderdeel daarvan is dat bepaalde elementen van dat control events moeten gaan afvuren.
Wanneer ik op iets klik wil ik dus een onclick event af laten gaan.
Wanneer ik op save klik bijvoorbeeld wil ik eerst een before_save() en dan een after_save() event triggeren.
Dit moet dan d.m.v. JS.
wanneer dan het moment is aangebroken dat zo'n event moet triggeren kijk ik of bepaalde elementen een attribuut 'before_save' hebben. Die attributen lees ik uit en doe dan (ja ranzig i know) een eval() op de value van dat attribuut.
Dit komt (kort door de bocht) neer op:
HTML:
1
2
3
| <div class="componentX" before_save="mijnfunctie(this)"> <div class="savebutton" onclick="savebutton_click()"></div> </div> |
JavaScript:
1
2
3
4
5
6
7
| savebutton_click = function() { ... if (node.attributes['before_save'] !== null && typeof node.attributes['before_save'] === "string") { eval(node.attributes['before_save'].value); } ... } |
nu wil ik echter dat ik in de methode "mijnfunctie()" ook het keyword 'this' kan gebruiken. Dit kan natuurlijk, maar deze is momenteel altijd 'window' omdat eval geen context heeft.
Nu ken ik bind en call en apply, maar krijg het niet voor elkaar om de juiste 'this' mee te geven, en eigenlijk denk ik dat het er op neem komt dat ik de text die ik nu 'evalueer' ook direct uitvoer. Ik wil hem eigenlijk alleen interpreteren en dan een apply() doen met daarin de juiste context meegegeven.
Hoe doet javascript dat zelf?
een onclick="alert(this)" werkt ook gewoon goed. Hoe bouw je DIE functionaliteit.
kort door de bocht is wat ik wil dat ik zelf events kan verzinnen, bijvoorbeeld:
HTML:
1
| <p oncolorchange="alert(this.style.color)" >woei</p> |
This message was sent on 100% recyclable electrons.