UNPKG

hellojs-xiaotian

Version:

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

46 lines (41 loc) 2.26 kB
// Makes a binding like with or if function makeWithIfBinding(bindingKey, isWith, isNot, makeContextCallback) { ko.bindingHandlers[bindingKey] = { 'init': function(element, valueAccessor, allBindings, viewModel, bindingContext) { var didDisplayOnLastUpdate, savedNodes; ko.computed(function() { var dataValue = ko.utils.unwrapObservable(valueAccessor()), shouldDisplay = !isNot !== !dataValue, // equivalent to isNot ? !dataValue : !!dataValue isFirstRender = !savedNodes, needsRefresh = isFirstRender || isWith || (shouldDisplay !== didDisplayOnLastUpdate); if (needsRefresh) { // Save a copy of the inner nodes on the initial update, but only if we have dependencies. if (isFirstRender && ko.computedContext.getDependenciesCount()) { savedNodes = ko.utils.cloneNodes(ko.virtualElements.childNodes(element), true /* shouldCleanNodes */); } if (shouldDisplay) { if (!isFirstRender) { ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(savedNodes)); } ko.applyBindingsToDescendants(makeContextCallback ? makeContextCallback(bindingContext, dataValue) : bindingContext, element); } else { ko.virtualElements.emptyNode(element); } didDisplayOnLastUpdate = shouldDisplay; } }, null, { disposeWhenNodeIsRemoved: element }); return { 'controlsDescendantBindings': true }; } }; ko.expressionRewriting.bindingRewriteValidators[bindingKey] = false; // Can't rewrite control flow bindings ko.virtualElements.allowedBindings[bindingKey] = true; } // Construct the actual binding handlers makeWithIfBinding('if'); makeWithIfBinding('ifnot', false /* isWith */, true /* isNot */); makeWithIfBinding('with', true /* isWith */, false /* isNot */, function(bindingContext, dataValue) { return bindingContext['createChildContext'](dataValue); } );