guy 7 years ago
parent
commit
4fe455b28b
  1. 2
      dist/fix/fix.compact.js
  2. 170
      dist/fix/fix.js

2
dist/fix/fix.compact.js vendored

@ -21,7 +21,7 @@
if (typeof handler === 'string') {
handler = vm[handler]
}
return Fix.VM.prototype.$watch.call(vm, keyOrFn, handler, options)
return Fix.watch(vm, keyOrFn, handler, options)
}
var _init = BI.Widget.prototype._init;

170
dist/fix/fix.js vendored

@ -868,17 +868,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
}
}
function createWatcher(vm, keyOrFn, handler, options) {
if (isPlainObject(handler)) {
options = handler;
handler = handler.handler;
}
if (typeof handler === 'string') {
handler = vm[handler];
}
return vm.$watch(keyOrFn, handler, options);
}
var falsy$1;
var operators = {
'||': falsy$1,
@ -898,6 +887,86 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
}
return new Function('return ' + expr)();
}
function watch(vm, expOrFn, cb, options) {
if (isPlainObject(cb)) {
options = cb;
cb = cb.handler;
}
if (typeof cb === 'string') {
cb = vm[cb];
}
options = options || {};
options.user = true;
var exps = void 0;
if (_.isFunction(expOrFn) || !(exps = expOrFn.match(/[a-zA-Z0-9_.*]+|[|][|]|[&][&]|[(]|[)]/g)) || exps.length === 1 && !/\*/.test(expOrFn)) {
var watcher = new Watcher(vm.model, expOrFn, _.bind(cb, vm), options);
if (options.immediate) {
cb.call(vm, watcher.value);
}
return function unwatchFn() {
watcher.teardown();
};
}
var watchers = [];
var fns = exps.slice();
var complete = false,
running = false;
_.each(exps, function (exp, i) {
if (_.has(operators, exp)) {
return;
}
if (/\*\*$|\*$/.test(exp)) {
var isGlobal = /\*\*$/.test(exp);
if (isGlobal) {
//a.**的形式
exp = exp.replace(".**", "");
} else {
//a.*的形式
exp = exp.replace(".*", "");
}
var getter = parsePath(exp);
var v = getter.call(vm.model, vm.model);
var dep = new Dep();
if (isGlobal) {
(v.__ob__._globalDeps || (v.__ob__._globalDeps = [])).push(dep);
} else {
(v.__ob__._deps || (v.__ob__._deps = [])).push(dep);
}
var w = new Watcher(vm.model, function () {
dep.depend();
return NaN;
}, _.bind(cb, vm));
watchers.push(function unwatchFn() {
w.teardown();
v.__ob__._globalDeps && remove(v.__ob__._globalDeps, dep);
v.__ob__._deps && remove(v.__ob__._deps, dep);
});
return;
}
var watcher = new Watcher(vm.model, exp, function () {
if (complete === true) {
return;
}
fns[i] = true;
if (runBinaryFunction(fns)) {
complete = true;
cb.call(vm);
}
if (!running) {
running = true;
nextTick(function () {
complete = false;
running = false;
fns = exps.slice();
});
}
}, options);
watchers.push(function unwatchFn() {
watcher.teardown();
});
});
return watchers;
}
var VM = function () {
function VM(model) {
@ -947,84 +1016,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
}
}
VM.prototype.$watch = function $watch(expOrFn, cb, options) {
var vm = this;
if (isPlainObject(cb)) {
return createWatcher(vm, expOrFn, cb, options);
}
options = options || {};
options.user = true;
var exps = void 0;
if (_.isFunction(expOrFn) || !(exps = expOrFn.match(/[a-zA-Z0-9_.*]+|[|][|]|[&][&]|[(]|[)]/g)) || exps.length === 1 && !/\*/.test(expOrFn)) {
var watcher = new Watcher(vm.model, expOrFn, _.bind(cb, vm), options);
if (options.immediate) {
cb.call(vm, watcher.value);
}
return function unwatchFn() {
watcher.teardown();
};
}
var watchers = [];
var fns = exps.slice();
var complete = false,
running = false;
_.each(exps, function (exp, i) {
if (_.has(operators, exp)) {
return;
}
if (/\*\*$|\*$/.test(exp)) {
var isGlobal = /\*\*$/.test(exp);
if (isGlobal) {
//a.**的形式
exp = exp.replace(".**", "");
} else {
//a.*的形式
exp = exp.replace(".*", "");
}
var getter = parsePath(exp);
var v = getter.call(vm.model, vm.model);
var dep = new Dep();
if (isGlobal) {
(v.__ob__._globalDeps || (v.__ob__._globalDeps = [])).push(dep);
} else {
(v.__ob__._deps || (v.__ob__._deps = [])).push(dep);
}
var w = new Watcher(vm.model, function () {
dep.depend();
return NaN;
}, _.bind(cb, vm));
watchers.push(function unwatchFn() {
w.teardown();
v.__ob__._globalDeps && remove(v.__ob__._globalDeps, dep);
v.__ob__._deps && remove(v.__ob__._deps, dep);
});
return;
}
var watcher = new Watcher(vm.model, exp, function () {
if (complete === true) {
return;
}
fns[i] = true;
if (runBinaryFunction(fns)) {
complete = true;
cb.call(vm);
}
if (!running) {
running = true;
nextTick(function () {
complete = false;
running = false;
fns = exps.slice();
});
}
}, options);
watchers.push(function unwatchFn() {
watcher.teardown();
});
});
return watchers;
};
VM.prototype._init = function _init() {};
VM.prototype.destroy = function destroy() {
@ -1044,6 +1035,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
exports.define = define;
exports.version = version;
exports.$$skipArray = $$skipArray;
exports.watch = watch;
exports.VM = VM;
exports.observerState = observerState;
exports.Observer = Observer;

Loading…
Cancel
Save