src/provider.js
function preProcessBindings(bindingString) {
  var results = [];
  var bindingHandlers = this.bindingHandlers;
  var preprocessed;

  // Check for a Provider.preprocessNode property
  if (typeof this.preprocessNode === 'function') {
    preprocessed = this.preprocessNode(bindingString, this);
    if (preprocessed) { bindingString = preprocessed; }
  }

  for (var i = 0, j = this.bindingPreProcessors.length; i < j; ++i) {
    preprocessed = this.bindingPreProcessors[i](bindingString, this);
    if (preprocessed) { bindingString = preprocessed; }
  }

  function addBinding(name, value) {
    results.push("'" + name + "':" + value);
  }

  function processBinding(key, value) {
    // Get the "on" binding from "on.click"
    var handler = bindingHandlers.get(key.split('.')[0]);

    if (handler && typeof handler.preprocess === 'function') {
      value = handler.preprocess(value, key, processBinding);
    }

    addBinding(key, value);
  }

  arrayForEach(parseObjectLiteral(bindingString), function(keyValueItem) {
    processBinding(
      keyValueItem.key || keyValueItem.unknown,
      keyValueItem.value
    );
  });

  return results.join(',');
}
function preProcessBindings(bindingString) {
  var results = [];
  var bindingHandlers = this.bindingHandlers;
  var preprocessed;

  // Check for a Provider.preprocessNode property
  if (typeof this.preprocessNode === 'function') {
    preprocessed = this.preprocessNode(bindingString, this);
    if (preprocessed) { bindingString = preprocessed; }
  }

  for (var i = 0, j = this.bindingPreProcessors.length; i < j; ++i) {
    preprocessed = this.bindingPreProcessors[i](bindingString, this);
    if (preprocessed) { bindingString = preprocessed; }
  }

  function addBinding(name, value) {
    results.push("'" + name + "':" + value);
  }

  function processBinding(key, value) {
    // Get the "on" binding from "on.click"
    var handler = bindingHandlers.get(key.split('.')[0]);

    if (handler && typeof handler.preprocess === 'function') {
      value = handler.preprocess(value, key, processBinding);
    }

    addBinding(key, value);
  }

  arrayForEach(parseObjectLiteral(bindingString), function(keyValueItem) {
    processBinding(
      keyValueItem.key || keyValueItem.unknown,
      keyValueItem.value
    );
  });

  return results.join(',');
}
function preProcessBindings ( bindingString ) { var results = [ ] ; var bindingHandlers = this . bindingHandlers ; var preprocessed ; // Check for a Provider.preprocessNode property if ( typeof this . preprocessNode === 'function' ) { preprocessed = this . preprocessNode ( bindingString , this ) ; if ( preprocessed ) { bindingString = preprocessed ; } } for ( var i = 0 , j = this . bindingPreProcessors . length ; i < j ; ++ i ) { preprocessed = this . bindingPreProcessors [ i ] ( bindingString , this ) ; if ( preprocessed ) { bindingString = preprocessed ; } } function addBinding ( name , value ) { results . push ( "'" + name + "':" + value ) ; } function processBinding ( key , value ) { // Get the "on" binding from "on.click" var handler = bindingHandlers . get ( key . split ( '.' ) [ 0 ] ) ; if ( handler && typeof handler . preprocess === 'function' ) { value = handler . preprocess ( value , key , processBinding ) ; } addBinding ( key , value ) ; } arrayForEach ( parseObjectLiteral ( bindingString ) , function ( keyValueItem ) { processBinding ( keyValueItem . key || keyValueItem . unknown , keyValueItem . value ) ; } ) ; return results . join ( ',' ) ; }
Call bindingHandler.preprocess on each respective binding string.

The `preprocess` property of bindingHandler must be a static
function (i.e. on the object or constructor).
Call bindingHandler . preprocess on each respective binding string .