当你创建一个Controller的同时也生成了一个jquery插件,他可以完成以下功能:1.在一个或者一些html元素上生成Controller;2.调用构造函数;3.更新Controller。
来看下面Controller的例子:
$.Controller("My.Widget",{ say : function(){ alert(this.options.message); } })
创建了一个名叫jQuery.fn.my_widget的插件,你可以这样使用它:
// 创建 my_widget 在每一个 .thing $(".thing").my_widget({message : "Hello"}) // 弹出 "Hello" $(".thing").my_widget("say"); // 更新 message 信息 $(".thing").my_widget({message : "World"}); // 弹出"World" $(".thing").my_widget("say");
创建Controller
当在jquery选择器上使用Controller的时候,他会遍历每一个相关的html元素,看他们是否存在Controller的实例,没有的话才会去创建。他会在你的元素上调用new YourController(),并把参数传给Controller。例如我们有两个.thing元素,
$(".thing").my_widget({message : "Hello"})
这段代码和下面的代码等效:
var things = $('.thing'), options = {message : "Hello"}; new My.Widget(things[0],options); new My.Widget(things[1],options);
当一个Controller创建的时候,他会调用prototype中的setup和init方法的。
调用Controller上的方法
当在一个html元素上创建了Controller之后就可以调用它上面的方法了,第一个参数是方法名,之后的是方法所需参数,如下例:
$.Controller("Adder",{ sum : function(first, second, third){ this.element.text(first+second+third); } }) // 在页面上添加了一个 adder $("#myadder").adder() // 显示 1+2+3 的结果 $("#myadder").adder("sum",1,2,3);
命名
默认情况下,插件的名字就是Controller的名字,但是会做下面一些修改:
1.使用jQuery.String.underscore()方法处理名称字符串,例如:
jQuery.String.underscore("OneTwo") //-> "one_two"
2.使用'_'代替'.'。
3.移除'Controllers'。
$.Controller("Foo") // -> .foo() $.Controller("Foo.Bar") // -> .foo_bar() $.Controller("Foo.Controllers.Bar") // -> .foo_bar()
你还可以通过设置静态pluginName属性来改变Controller默认的名字。
$.Controller("My.Tabs", { pluginName: "tabs" }, { ... }) $("#tabs").tabs()