<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript" charset="utf-8">
(function($, exports){
var mod = {};
//創建一個函數體
mod.create = function(includes){
//設定一個局部函數體
var result = function(){
//調用原型的initializer方法和init方法
this.initializer.apply(this, arguments);
this.init.apply(this, arguments);
};
result.fn = result.prototype;
result.fn.init = function(){};
result.proxy = function(func){ return $.proxy(func, this); };
result.fn.proxy = result.proxy;
result.include = function(ob){ $.extend(this.fn, ob); };
result.extend = function(ob){ $.extend(this, ob); };
result.include({
initializer: function(options){
this.options = options;
for (var key in this.options)
this[key] = this.options[key];
//初始化,綁定事件這個方法
if (this.events) this.delegateEvents();
//初始化,選擇器與局部變量對的方法
if (this.elements) this.refreshElements();
},
$: function(selector){
//這裏返回的是this.el下的selector的dom元素
return $(selector, this.el);
},
refreshElements: function(){
for (var key in this.elements) {
this[this.elements[key]] = this.$(key);
}
},
eventSplitter: /^(\w+)\s*(.*)$/,//按照空格隔開
delegateEvents: function(){
for (var key in this.events) {
//設定方法名字
var methodName = this.events[key];
var method = this.proxy(this[methodName]);
//正則表達式,分割選擇器與事件
var match = key.match(this.eventSplitter);
//第一個爲事件,第二個爲選擇器
var eventName = match[1], selector = match[2];
if (selector === '') {//如果選擇器爲空,則用bind,綁定所有el的元素
this.el.bind(eventName, method);
} else {//否則,用delegate,委託給el元素,只要冒泡出現selector的,事件爲eventname的,則調用。
this.el.delegate(selector, eventName, method);
}
}
}
});
if (includes) result.include(includes);
return result;
};
exports.Controller = mod;
})(jQuery, window);
var exports = this;
//主函數體的進行
jQuery(function($){
exports.SearchView = Controller.create({
//選擇器與局部變量的KEY-Value
elements: {
"input[type=search]": "searchInput",
"form": "searchForm"
},
//事件 選擇器 與執行原型方法名 的Key-Value
events: {
"submit form": "search"
},
init: function(){ /* ... */ },
search: function(){
alert("Searching: " + this.searchInput.val());
return false;
}
});
new SearchView({el: $("#users")});
});
</script>
</head>
<body>
<div id="users">
<form>
<input type="search" value="" placeholder="Enter a query">
<button>Search</button>
</form>
</div>
</body>
讀書筆記 :前端MVC中的控制器,實現對元素,事件的規劃
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.