Skip to content

Commit 8ee03cb

Browse files
committed
test
1 parent d4cf185 commit 8ee03cb

File tree

1 file changed

+153
-1
lines changed

1 file changed

+153
-1
lines changed

js/jing.js

+153-1
Original file line numberDiff line numberDiff line change
@@ -1195,6 +1195,7 @@
11951195
}
11961196
});
11971197

1198+
// TODO 暂时的替代方法
11981199
$.fn.show = function(){
11991200
this.css({ display : 'block' });
12001201
}
@@ -1211,6 +1212,156 @@
12111212
});
12121213
*/
12131214

1215+
var optionsCache = {};
1216+
_.createOptions = function(options){
1217+
var object = optionsCache[options] = {};
1218+
$.each(options.match(rnotwhite) || [], function(i, flag){
1219+
object[flag] = true;
1220+
});
1221+
return object;
1222+
}
1223+
1224+
// 回调函数
1225+
$.Callbacks = function(options){
1226+
options = typeof options === 'string' ?
1227+
(optionsCache[options] || _.createOptions(options)) :
1228+
$.extend({}, options);
1229+
1230+
var firing,
1231+
memory,
1232+
fired,
1233+
firingStart,
1234+
firingLength,
1235+
firingIndex,
1236+
list = [], // 回调列表
1237+
stack = !options.once && [],
1238+
fire = function(data){
1239+
memory = options.memory && data; // 如果参数memory为true,则记录data
1240+
fired = true; // 标记触发回调
1241+
firingIndex = firingStart || 0;
1242+
firingStart = 0;
1243+
firingLength = list.length;
1244+
firing = true; // 标记正在触发回调
1245+
1246+
for( ; list && firingIndex < firingLength; firingIndex++){
1247+
if(list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse){
1248+
memory = false; // 阻止未来可能由于add所产生的回调
1249+
break; // 由于参数stopOnFalse为true,所以当有回调函数返回值为false时退出循环
1250+
}
1251+
}
1252+
firing = false; // 标记回调结束
1253+
if(list){
1254+
if(stack){
1255+
if(stack.length){
1256+
fire(stack.shift());
1257+
}
1258+
} else if(memory){ // 否则,如果有记忆
1259+
list = [];
1260+
} else { // 再否则阻止回调列表中的回调
1261+
self.disable();
1262+
}
1263+
}
1264+
},
1265+
self = {
1266+
// 添加回调列表
1267+
add : function(){
1268+
if(list){
1269+
var start = list.length;
1270+
1271+
(function add(args){
1272+
$.each(args, function(i, arg){
1273+
var type = $.type(args);
1274+
1275+
if(type === 'function'){
1276+
if(!options.unique || !self.has(arg)){
1277+
list.push(arg);
1278+
}
1279+
} else if(arg && arg.length && type !== 'string'){ // 假如传过来的参数为数组或array-like,则继续调用添加,从这里可以看出add的传参可以有add(fn),add([fn1,fn2]),add(fn1,fn2)
1280+
add(arg);
1281+
}
1282+
});
1283+
1284+
if(firing){
1285+
firingLength = list.length;
1286+
} else if(memory){
1287+
firingStart = start;
1288+
fire(memory);
1289+
}
1290+
}(arguments));
1291+
}
1292+
return this;
1293+
},
1294+
remove : function(){
1295+
if(list){
1296+
$.each(arguments, function(i, arg){
1297+
var index;
1298+
while((index = $.inArray(arg, list, index)) > -1){
1299+
list.splice(index, 1);
1300+
if(firing){
1301+
if(index < firingLength){
1302+
firingLength--;
1303+
}
1304+
if(index <= firingIndex){
1305+
firingIndex--;
1306+
}
1307+
}
1308+
}
1309+
});
1310+
}
1311+
return this;
1312+
},
1313+
has : function(fn){
1314+
return fn ? $.inArray(fn, list) > -1 : !!(list && list.length);
1315+
},
1316+
empty : function(){
1317+
list = [];
1318+
firingLength = 0;
1319+
return this;
1320+
},
1321+
disable : function(){
1322+
list = stack = memory = undefined;
1323+
return this;
1324+
},
1325+
disabled : function(){
1326+
return !list;
1327+
},
1328+
lock : function(){
1329+
stack = undefined;
1330+
if(!memory){
1331+
self.disabled();
1332+
}
1333+
return this;
1334+
},
1335+
locked : function(){
1336+
return !stack;
1337+
},
1338+
fireWith : function(context, args){
1339+
if(list && (!fired || stack)){
1340+
args = args || [];
1341+
args = [context, args.slice ? args.slice() : args];
1342+
1343+
if(firing){
1344+
stack.push(args);
1345+
} else {
1346+
fire(args);
1347+
}
1348+
}
1349+
return this;
1350+
},
1351+
fire : function(){
1352+
self.fireWith(this, arguments);
1353+
return this;
1354+
},
1355+
fired : function(){
1356+
return !!fired;
1357+
}
1358+
};
1359+
1360+
return self;
1361+
}
1362+
1363+
1364+
12141365
}(window));
12151366

12161367
// 2014-04-21 : 准备开发第一版
@@ -1222,4 +1373,5 @@
12221373
// 2014-05-08 : 增加$().css({ color : 'red' }), $(window).width,height(), $(document).width,height();
12231374
// 2014-05-09 : 增加$().width()方法, event first;
12241375
// 2014-05-12 : 增加$().data(), $().removeData()方法
1225-
// 2014-05-13 : 增加$().event.dispatch方法
1376+
// 2014-05-13 : 增加$().event.dispatch方法
1377+
// 2014-05-14 : 增加$().CallBacks()方法

0 commit comments

Comments
 (0)