lib/directive.js
function _update() {
        if (d.$destroyed) return consoler.warn('Directive "' + name + '" already destroyed.')

        var hasDiff = false
        // empty expression also can trigger update, such `r-text` directive
        if (!isExpr || isConst) {
            if (shouldUpdate && shouldUpdate.call(d)) {
                upda && upda.call(d)
            }
        } else {
            var nexv = d.$exec(expr, mutable || !customDiff) // [error, result]
            var r = nexv[1]
            var payload = {}
            if (!nexv[0]) {
                if (customDiff) {
                    hasDiff = customDiff.call(d, r, prev)
                } else {
                    r = util.cloneAndDiff(r, prev, payload)
                    hasDiff = !!payload.diff
                }
                if (hasDiff && (!shouldUpdate || shouldUpdate.call(d, r, prev))) {
                    var p = prev
                    prev = r
                    upda && upda.call(d, r, p)
                }
            }
        }
        afterUpdate && afterUpdate.call(d, hasDiff)
    }
function _update() {
        if (d.$destroyed) return consoler.warn('Directive "' + name + '" already destroyed.')

        var hasDiff = false
        // empty expression also can trigger update, such `r-text` directive
        if (!isExpr || isConst) {
            if (shouldUpdate && shouldUpdate.call(d)) {
                upda && upda.call(d)
            }
        } else {
            var nexv = d.$exec(expr, mutable || !customDiff) // [error, result]
            var r = nexv[1]
            var payload = {}
            if (!nexv[0]) {
                if (customDiff) {
                    hasDiff = customDiff.call(d, r, prev)
                } else {
                    r = util.cloneAndDiff(r, prev, payload)
                    hasDiff = !!payload.diff
                }
                if (hasDiff && (!shouldUpdate || shouldUpdate.call(d, r, prev))) {
                    var p = prev
                    prev = r
                    upda && upda.call(d, r, p)
                }
            }
        }
        afterUpdate && afterUpdate.call(d, hasDiff)
    }
update handler