Skip to content

Latest commit

 

History

History
101 lines (69 loc) · 2.93 KB

File metadata and controls

101 lines (69 loc) · 2.93 KB

@page jquery.controller.plugin The generated jQuery plugin @parent jQuery.Controller

When you create a controller, it creates a jQuery plugin that can be used to:

  • Create controllers on an element or elements
  • Call controller methods
  • Update a controller

For example, the following controller:

$.Controller("My.Widget",{
  say : function(){
     alert(this.options.message);
  }
})

creates a jQuery.fn.my_widget method that you can use like:

// create my_widget on each .thing
$(".thing").my_widget({message : "Hello"}) 

// alerts "Hello"
$(".thing").my_widget("say");

// updates the message option
$(".thing").my_widget({message : "World"});

// alerts "World"
$(".thing").my_widget("say");

Note that in every case, the my_widget plugin returns the original jQuery collection for chaining ($('.thing')). If you want to get a value from a controller, use the [jQuery.fn.controllers] or [jQuery.fn.controller].

Creating controllers

When a controller's jQuery plugin helper is used on a jQuery collection, it goes to each element and tests if it has a controller instance on the element. If it does not, it creates one.

It calls new YourController with the element and any additional arguments you passed to the jQuery plugin helper. So for example, say there are 2 elements in $('.thing').

This:

$(".thing").my_widget({message : "Hello"})

Does the exact same thing as:

var things = $('.thing'),
    options = {message : "Hello"};
new My.Widget(things[0],options);
new My.Widget(things[1],options);

Note, when a new Class is created, it calls your class's prototype setup and init methods. Read [jQuery.Controller.prototype.setup controller's setup] for the details on what happens when a new controller is created.

Calling methods on controllers

Once a Controller is already on an element, you can call methods on it with the same jQuery helper. The first param to the helper is the name of the method, the following params are passed to the jQuery function. For example:

$.Controller("Adder",{
  sum : function(first, second, third){
     this.element.text(first+second+third);
  }
})

// add an adder to the page
$("#myadder").adder()

// show the sum of 1+2+3
$("#myadder").adder("sum",1,2,3);

Naming

By default, a controller's jQuery helper is the controller name:

  • [jQuery.String.underscore underscored]
  • "." replaced with "_"
  • with Controllers removed.

Here are some examples:

$.Controller("Foo")                 // -> .foo()
$.Controller("Foo.Bar")             // -> .foo_bar()
$.Controller("Foo.Controllers.Bar") // -> .foo_bar()

You can overwrite the Controller's default name by setting a static pluginName property:

$.Controller("My.Tabs",
{
  pluginName: "tabs"
},
{ ... })

$("#tabs").tabs()