J'ai créé un objet Javascript via la prototypage. J'essaie de rendre un tableau dynamiquement. Alors que la partie rendu est simple et fonctionne bien, j'ai également besoin de gérer certains événements côté client pour le tableau rendu dynamiquement. Cela aussi est facile. Où j'ai des problèmes, c'est avec la référence "this" à l'intérieur de la fonction qui gère l'événement. Au lieu de référencer l'objet, il référence l'élément qui a déclenché l'événement.
Voir le code. La zone problématique se trouve dans ticketTable.prototype.handleCellClick = function()
:
function ticketTable(ticks)
{
// les tickets sont un tableau
this.tickets = ticks;
}
ticketTable.prototype.render = function(element)
{
var tbl = document.createElement("table");
for (var i = 0; i < this.tickets.length; i++)
{
// créer une rangée et des cellules
var row = document.createElement("tr");
var cell1 = document.createElement("td");
var cell2 = document.createElement("td");
// ajouter du texte aux cellules
cell1.appendChild(document.createTextNode(i));
cell2.appendChild(document.createTextNode(this.tickets[i]));
// gérer les clics sur la première cellule.
// FYI, cela fonctionne uniquement dans FF, besoin de quelques lignes de code supplémentaires pour IE
cell1.addEventListener("click", this.handleCellClick, false);
// ajouter les cellules à la rangée
row.appendChild(cell1);
row.appendChild(cell2);
// ajouter la rangée au tableau
tbl.appendChild(row);
}
// Ajouter le tableau à la page
element.appendChild(tbl);
}
ticketTable.prototype.handleCellClick = function()
{
// PROBLÈME !!! dans le contexte de cette fonction,
// lorsqu'elle est utilisée pour gérer un événement,
// "this" est l'élément qui a déclenché l'événement.
// cela fonctionne bien
alert(this.innerHTML);
// cela ne fonctionne pas. Je n'arrive pas à trouver la syntaxe pour accéder au tableau dans l'objet.
alert(this.tickets.length);
}