discordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teams
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
/** |
|
* @private |
|
*/ |
|
Ext.define('Ext.mixin.Hookable', { |
|
extend: 'Ext.Mixin', |
|
|
|
mixinConfig: { |
|
id: 'hookable' |
|
}, |
|
|
|
bind: function(instance, boundMethod, bindingMethod, preventDefault, extraArgs) { |
|
if (!bindingMethod) { |
|
bindingMethod = boundMethod; |
|
} |
|
|
|
var boundFn = instance[boundMethod], |
|
fn, binding; |
|
|
|
if (boundFn && boundFn.hasOwnProperty('$binding')) { |
|
binding = boundFn.$binding; |
|
if (binding.bindingMethod === bindingMethod && binding.bindingScope === this) { |
|
return this; |
|
} |
|
} |
|
|
|
instance[boundMethod] = fn = function() { |
|
var binding = fn.$binding, |
|
scope = binding.bindingScope, |
|
args = Array.prototype.slice.call(arguments); |
|
|
|
args.push(arguments); |
|
|
|
if (extraArgs) { |
|
args.push.apply(args, extraArgs); |
|
} |
|
|
|
if (!binding.preventDefault && scope[binding.bindingMethod].apply(scope, args) !== false) { |
|
return binding.boundFn.apply(this, arguments); |
|
} |
|
}; |
|
fn.$binding = { |
|
preventDefault: !!preventDefault, |
|
boundFn: boundFn, |
|
bindingMethod: bindingMethod, |
|
bindingScope: this |
|
}; |
|
|
|
return this; |
|
}, |
|
|
|
unbind: function(instance, boundMethod, bindingMethod) { |
|
if (!bindingMethod) { |
|
bindingMethod = boundMethod; |
|
} |
|
|
|
var fn = instance[boundMethod], |
|
binding = fn.$binding, |
|
boundFn, currentBinding; |
|
|
|
while (binding) { |
|
boundFn = binding.boundFn; |
|
|
|
if (binding.bindingMethod === bindingMethod && binding.bindingScope === this) { |
|
if (currentBinding) { |
|
currentBinding.boundFn = boundFn; |
|
} |
|
else { |
|
instance[boundMethod] = boundFn; |
|
} |
|
|
|
return this; |
|
} |
|
|
|
currentBinding = binding; |
|
binding = boundFn.$binding; |
|
} |
|
|
|
return this; |
|
} |
|
});
|
|
|