lib/compiler.js
function _watch(vm, vars, update) {
    var watchKeys = []
    function _handler (kp) {
        if (watchKeys.some(function(key) {
            if (_relative(kp, key)) {
                return true
            }
        })) update.apply(null, arguments)
    }

    if (vars && vars.length) {
        vars.forEach(function (k) {
            if (~keywords.indexOf(k)) return
            while (k) {
                if (!~watchKeys.indexOf(k)) watchKeys.push(k)
                k = util.digest(k)
            }
        })
        if (!watchKeys.length) return noop
        return vm.$watch(_handler)
    }
    return noop
}
function _watch(vm, vars, update) {
    var watchKeys = []
    function _handler (kp) {
        if (watchKeys.some(function(key) {
            if (_relative(kp, key)) {
                return true
            }
        })) update.apply(null, arguments)
    }

    if (vars && vars.length) {
        vars.forEach(function (k) {
            if (~keywords.indexOf(k)) return
            while (k) {
                if (!~watchKeys.indexOf(k)) watchKeys.push(k)
                k = util.digest(k)
            }
        })
        if (!watchKeys.length) return noop
        return vm.$watch(_handler)
    }
    return noop
}
function _watch ( vm , vars , update ) { var watchKeys = [ ] function _handler ( kp ) { if ( watchKeys . some ( function ( key ) { if ( _relative ( kp , key ) ) { return true } } ) ) update . apply ( null , arguments ) } if ( vars && vars . length ) { vars . forEach ( function ( k ) { if ( ~ keywords . indexOf ( k ) ) return while ( k ) { if ( ! ~ watchKeys . indexOf ( k ) ) watchKeys . push ( k ) k = util . digest ( k ) } } ) if ( ! watchKeys . length ) return noop return vm . $watch ( _handler ) } return noop }
watch changes of variable-name of keypath
@return <Function> unwatch
watch changes of variable - name of keypath