element
The element passed to the Control when creating a new instance.
can-view-nodeList
The control instance's HTMLElement (or window) wrapped by the util library for ease of use.
It is set by the first parameter to new Construct( element, options )
in [can.Control::setup]. By default, a control listens to events on this.element.
Example - NodeList
The following HelloWorld control sets the control`s text to "Hello World":
HelloWorld = Control({
init: function(){
this.element.text( 'Hello World' );
}
});
// create the controller on the element
new HelloWorld( document.getElementById( '#helloworld' ) );
Wrapped NodeList
this.element is a wrapped NodeList of one HTMLELement (or window). This
is for convenience in libraries like jQuery where all methods operate only on a
NodeList. To get the raw HTMLElement, write:
this.element[0] //-> HTMLElement
The following details the NodeList used by each library with an example of updating its text:
jQuery jQuery( HTMLElement )
this.element.text("Hello World")
Zepto Zepto( HTMLElement )
this.element.text("Hello World")
Dojo new dojo.NodeList( HTMLElement )
this.element.text("Hello World")
Mootools $$( HTMLElement )
this.element.empty().appendText("Hello World")
YUI
this.element.set("text", "Hello World")
Changing this.element
Sometimes you don't want what's passed to new Control
to be this.element. You can change this by overwriting
setup or by unbinding, setting this.element, and rebinding.
Overwriting Setup
The following Combobox overwrites setup to wrap a
select element with a div. That div is used
as this.element. Notice how destroy sets back the
original element.
Combobox = Control({
setup: function( el, options ) {
this.oldElement = $( el );
var newEl = $( '<div/>' );
this.oldElement.wrap( newEl );
can.Control.prototype.setup.call( this, newEl, options );
},
init: function() {
this.element //-> the div
},
"{element} .option click": function() {
// event handler bound on the div
},
destroy: function() {
var div = this.element; //save reference
Control.prototype.destroy.call( this );
div.replaceWith( this.oldElement );
}
});
Unbinding, setting, and rebinding.
You could also change this.element by calling [can.Control::off], setting this.element, and then calling [can.Control::on] like:
move: function( newElement ) {
this.off();
this.element = $( newElement );
this.on();
}