UNPKG

hellojs-xiaotian

Version:

A clientside Javascript library for standardizing requests to OAuth2 web services (and OAuth1 - with a shim)

53 lines (49 loc) 2.44 kB
// For certain common events (currently just 'click'), allow a simplified data-binding syntax // e.g. click:handler instead of the usual full-length event:{click:handler} function makeEventHandlerShortcut(eventName) { ko.bindingHandlers[eventName] = { 'init': function(element, valueAccessor, allBindings, viewModel, bindingContext) { var newValueAccessor = function () { var result = {}; result[eventName] = valueAccessor(); return result; }; return ko.bindingHandlers['event']['init'].call(this, element, newValueAccessor, allBindings, viewModel, bindingContext); } } } ko.bindingHandlers['event'] = { 'init' : function (element, valueAccessor, allBindings, viewModel, bindingContext) { var eventsToHandle = valueAccessor() || {}; ko.utils.objectForEach(eventsToHandle, function(eventName) { if (typeof eventName == "string") { ko.utils.registerEventHandler(element, eventName, function (event) { var handlerReturnValue; var handlerFunction = valueAccessor()[eventName]; if (!handlerFunction) return; try { // Take all the event args, and prefix with the viewmodel var argsForHandler = ko.utils.makeArray(arguments); viewModel = bindingContext['$data']; argsForHandler.unshift(viewModel); handlerReturnValue = handlerFunction.apply(viewModel, argsForHandler); } finally { if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true. if (event.preventDefault) event.preventDefault(); else event.returnValue = false; } } var bubble = allBindings.get(eventName + 'Bubble') !== false; if (!bubble) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); } }); } }); } };