DoneJS StealJS jQuery ++ FuncUnit DocumentJS
3.0.0
2.3.27

 

  • Github
  • Twitter
  • Chat
  • Forum
  • Guides
  • Core
  • Ecosystem
  • Infrastructure
    • can-construct
    • can-control
      • static
        • defaults
        • extend
        • processors
      • prototype
        • destroy
        • element
        • on
        • options
        • setup
    • can-event
    • can-event/async/async
    • can-event/batch/batch
    • can-observation
    • can-simple-map
    • can-util
    • can-view-callbacks
    • can-view-live
    • can-view-model
    • can-view-nodelist
    • can-view-parser
    • can-view-scope
    • can-view-target
  • Legacy
  • Bitovi
    • Bitovi.com
    • Blog
    • Consulting
    • Training
    • Open Source
  • Chat
  • Forum
  • Star
  • Follow @canjs
  • CanJS
  • /
  • Infrastructure
  • /
  • can-control
  • /
  • element
  • / On this page
    • element

      property

      The element passed to the Control when creating a new instance.

      • source

      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();
      }
      

      CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 3.0.0.