]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/src/mixin/Hookable.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / src / mixin / Hookable.js
CommitLineData
6527f429
DM
1/**\r
2 * @private\r
3 */\r
4Ext.define('Ext.mixin.Hookable', {\r
5 extend: 'Ext.Mixin',\r
6\r
7 mixinConfig: {\r
8 id: 'hookable'\r
9 },\r
10\r
11 bindHook: function(instance, boundMethod, bindingMethod, preventDefault, extraArgs) {\r
12 if (!bindingMethod) {\r
13 bindingMethod = boundMethod;\r
14 }\r
15\r
16 var boundFn = instance[boundMethod],\r
17 fn, binding;\r
18\r
19 if (boundFn && boundFn.hasOwnProperty('$binding')) {\r
20 binding = boundFn.$binding;\r
21 if (binding.bindingMethod === bindingMethod && binding.bindingScope === this) {\r
22 return this;\r
23 }\r
24 }\r
25\r
26 instance[boundMethod] = fn = function() {\r
27 var binding = fn.$binding,\r
28 scope = binding.bindingScope,\r
29 args = Array.prototype.slice.call(arguments);\r
30\r
31 args.push(arguments);\r
32\r
33 if (extraArgs) {\r
34 args.push.apply(args, extraArgs);\r
35 }\r
36\r
37 if (!binding.preventDefault && scope[binding.bindingMethod].apply(scope, args) !== false) {\r
38 return binding.boundFn.apply(this, arguments);\r
39 }\r
40 };\r
41 fn.$binding = {\r
42 preventDefault: !!preventDefault,\r
43 boundFn: boundFn,\r
44 bindingMethod: bindingMethod,\r
45 bindingScope: this\r
46 };\r
47\r
48 return this;\r
49 },\r
50\r
51 unbindHook: function(instance, boundMethod, bindingMethod) {\r
52 if (!bindingMethod) {\r
53 bindingMethod = boundMethod;\r
54 }\r
55\r
56 var fn = instance[boundMethod],\r
57 binding = fn.$binding,\r
58 boundFn, currentBinding;\r
59\r
60 while (binding) {\r
61 boundFn = binding.boundFn;\r
62\r
63 if (binding.bindingMethod === bindingMethod && binding.bindingScope === this) {\r
64 if (currentBinding) {\r
65 currentBinding.boundFn = boundFn;\r
66 }\r
67 else {\r
68 instance[boundMethod] = boundFn;\r
69 }\r
70\r
71 return this;\r
72 }\r
73\r
74 currentBinding = binding;\r
75 binding = boundFn.$binding;\r
76 }\r
77\r
78 return this;\r
79 }\r
80});\r