UNPKG

hellojs-xiaotian

Version:

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

39 lines (36 loc) 2.35 kB
// "foreach: someExpression" is equivalent to "template: { foreach: someExpression }" // "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }" ko.bindingHandlers['foreach'] = { makeTemplateValueAccessor: function(valueAccessor) { return function() { var modelValue = valueAccessor(), unwrappedValue = ko.utils.peekObservable(modelValue); // Unwrap without setting a dependency here // If unwrappedValue is the array, pass in the wrapped value on its own // The value will be unwrapped and tracked within the template binding // (See https://github.com/SteveSanderson/knockout/issues/523) if ((!unwrappedValue) || typeof unwrappedValue.length == "number") return { 'foreach': modelValue, 'templateEngine': ko.nativeTemplateEngine.instance }; // If unwrappedValue.data is the array, preserve all relevant options and unwrap again value so we get updates ko.utils.unwrapObservable(modelValue); return { 'foreach': unwrappedValue['data'], 'as': unwrappedValue['as'], 'includeDestroyed': unwrappedValue['includeDestroyed'], 'afterAdd': unwrappedValue['afterAdd'], 'beforeRemove': unwrappedValue['beforeRemove'], 'afterRender': unwrappedValue['afterRender'], 'beforeMove': unwrappedValue['beforeMove'], 'afterMove': unwrappedValue['afterMove'], 'templateEngine': ko.nativeTemplateEngine.instance }; }; }, 'init': function(element, valueAccessor, allBindings, viewModel, bindingContext) { return ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor)); }, 'update': function(element, valueAccessor, allBindings, viewModel, bindingContext) { return ko.bindingHandlers['template']['update'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor), allBindings, viewModel, bindingContext); } }; ko.expressionRewriting.bindingRewriteValidators['foreach'] = false; // Can't rewrite control flow bindings ko.virtualElements.allowedBindings['foreach'] = true;