Note that there are some explanatory texts on larger screens.

plurals
  1. POEvent/Class Design Pattern (Prototype)
    primarykey
    data
    text
    <p>I've bumped up against this before and I need the help of someone smarter than me! </p> <p>How can I attach an event of an element to a method of a class? More specifically, the same class? Is there a better way?</p> <p>Using a Qt widget style approach, I've been trying to create self-contained "widget" objects in javascript. I'm using the Prototype javascript framework and building my widget as a class. Then, using Event.observe, I've tried to attach the event to a method of the class. But the Event assignment unbinds the assigned method. Here's an example of a simple table I'm trying to build that has clickable column headers:</p> <pre><code> Objectify.Grid.Table = Class.create({ initialize: function(headers) { this.columns = headers; this.rows = []; }, addRow: function(GridData) { var len = this.rows.push(GridData); return len-1; }, getRow: function(rowIndex) { return this.rows[rowIndex]; }, build: function(parent) { this.mainTable = new Element('table',{'class':'Objectify-Grid'}); $(parent).update(this.mainTable); var tableBody = new Element('tbody',{}); this.mainTable.update(tableBody); var headerRow = new Element('tr',{'class':'Objectify-Grid-header-row'}); tableBody.update(headerRow); this.columns.each(function(val,id) { var hcell = new Element('td',{'class':'Objectify-Grid-header-cell'}).update(val); headerRow.insert(hcell); // EVENT ASSIGNMENT // hcell.observe('click',this.respondToClick); ///////////////////// }.bind(this)); this.rows.each(function(GridData,id) { var row = new Element('tr',{'class':'Objectify-Grid-row','id':'Objectify-Grid-row'+id}); tableBody.insert(row); this.columns.each(function(columnName,index) { var cell = new Element('td',{'class':'Objectify-Grid-cell'}).update(GridData.getValue(columnName)); row.insert(cell); }); }.bind(this)); }, // RECEIVING METHOD // respondToClick: function(event) { var columnName = event.element().innerHTML; // "this" is no longer bound in this method this.sortColumnAsc(columnName); // [ERROR] } }); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload