Browse Source

update Fix

es6
guy 7 years ago
parent
commit
97d88c44c6
  1. 224
      dist/fix/fix.js

224
dist/fix/fix.js vendored

@ -437,9 +437,87 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
return ob; return ob;
} }
function notify(model, key, dep) {
dep.notify();
//触发a.*绑定的依赖
_.each(model.__ob__._deps, function (dep) {
dep.notify();
});
//触发a.**绑定的依赖
var parent = model.__ob__,
root = model.__ob__,
route = key;
while (parent) {
_.each(parent._scopeDeps, function (dep) {
dep.notify();
});
if (parent.parentKey != null) {
route = parent.parentKey + '.' + route;
}
root = parent;
parent = parent.parent;
}
for (var _key2 in root._globalDeps) {
var reg = new RegExp(_key2);
if (reg.test(route)) {
root._globalDeps[_key2].notify();
}
}
}
function defineReactive(obj, observer, shallow) { function defineReactive(obj, observer, shallow) {
var props = {}; var props = {};
var model = void 0; var model = void 0;
if (typeof Proxy === 'function') {
var deps = {},
childObs = {},
cache = {};
_.each(obj, function (val, key) {
if (key in $$skipArray) {
return;
}
cache[key] = val;
var dep = deps[key] = observer && observer['__dep' + key] || new Dep();
observer && (observer['__dep' + key] = dep);
childObs[key] = !shallow && observe(val, observer, key);
});
return model = new Proxy(props, {
has: function has(target, key) {
return key in obj;
},
get: function get(target, key) {
if (key in $$skipArray) {
return target[key];
}
var value = cache[key];
if (Dep.target) {
deps[key].depend();
if (childObs[key]) {
childObs[key].dep.depend();
if (_.isArray(value)) {
dependArray(value);
}
}
}
return value;
},
set: function set(target, key, newVal) {
if (key in $$skipArray) {
return target[key] = newVal;
}
var value = cache[key],
dep = deps[key];
if (newVal === value || newVal !== newVal && value !== value) {
return newVal;
}
cache[key] = newVal;
childObs[key] = !shallow && observe(newVal, observer, key);
obj[key] = childObs[key] ? childObs[key].model : newVal;
notify(model, key, dep);
return obj[key];
}
});
}
_.each(obj, function (val, key) { _.each(obj, function (val, key) {
if (key in $$skipArray) { if (key in $$skipArray) {
return; return;
@ -471,31 +549,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
val = newVal; val = newVal;
childOb = !shallow && observe(newVal, observer, key); childOb = !shallow && observe(newVal, observer, key);
obj[key] = childOb ? childOb.model : newVal; obj[key] = childOb ? childOb.model : newVal;
dep.notify(); notify(model, key, dep);
//触发a.*绑定的依赖
_.each(model.__ob__._deps, function (dep) {
dep.notify();
});
//触发a.**绑定的依赖
var parent = model.__ob__,
root = model.__ob__,
route = key;
while (parent) {
_.each(parent._scopeDeps, function (dep) {
dep.notify();
});
if (parent.parentKey != null) {
route = parent.parentKey + '.' + route;
}
root = parent;
parent = parent.parent;
}
for (var _key2 in root._globalDeps) {
var reg = new RegExp(_key2);
if (reg.test(route)) {
root._globalDeps[_key2].notify();
}
}
} }
}; };
}); });
@ -838,11 +892,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
} }
} }
function defineComputed(target, computed) { function defineComputed(vm, computed) {
var props = {}; var props = {};
if (typeof Proxy === 'function') {
return vm.$$computed = new Proxy(props, {
has: function has(target, key) {
return key in computed;
},
get: function get(target, key) {
return createComputedGetter(vm, key)();
}
});
}
var shouldCache = true; var shouldCache = true;
for (var key in computed) { for (var key in computed) {
if (!(key in target)) { if (!(key in vm)) {
var sharedPropertyDefinition = { var sharedPropertyDefinition = {
enumerable: true, enumerable: true,
configurable: true, configurable: true,
@ -851,7 +915,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
}; };
var userDef = computed[key]; var userDef = computed[key];
if (typeof userDef === 'function') { if (typeof userDef === 'function') {
sharedPropertyDefinition.get = createComputedGetter(target, key); sharedPropertyDefinition.get = createComputedGetter(vm, key);
sharedPropertyDefinition.set = noop; sharedPropertyDefinition.set = noop;
} else { } else {
sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : userDef.get : noop; sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : userDef.get : noop;
@ -861,7 +925,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
props[key] = sharedPropertyDefinition; props[key] = sharedPropertyDefinition;
} }
} }
target.$$computed = createViewModel$1({}, props); vm.$$computed = createViewModel$1({}, props);
} }
function createComputedGetter(vm, key) { function createComputedGetter(vm, key) {
@ -885,11 +949,76 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
} }
} }
function defineProps(vm, keys) {
var props = {};
if (typeof Proxy === 'function') {
return vm.model = new Proxy(props, {
has: function has(target, key) {
return keys.indexOf(key) > -1;
},
get: function get(target, key) {
if (key in $$skipArray) {
return props[key];
}
if (vm.$$computed && key in vm.$$computed) {
return vm.$$computed[key];
}
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key];
}
return vm.$$model[key];
},
set: function set(target, key, val) {
if (key in $$skipArray) {
return props[key] = val;
}
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key] = val;
}
if (vm.$$model && key in vm.$$model) {
return vm.$$model[key] = val;
}
}
});
}
var _loop = function _loop(i, len) {
var key = keys[i];
if (!(key in $$skipArray)) {
props[key] = {
enumerable: true,
configurable: true,
get: function get() {
if (vm.$$computed && key in vm.$$computed) {
return vm.$$computed[key];
}
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key];
}
return vm.$$model[key];
},
set: function set(val) {
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key] = val;
}
if (vm.$$model && key in vm.$$model) {
return vm.$$model[key] = val;
}
}
};
}
};
for (var i = 0, len = keys.length; i < len; i++) {
_loop(i, len);
}
vm.model = createViewModel$1({}, props);
}
var VM = function () { var VM = function () {
function VM(model) { function VM(model) {
_classCallCheck(this, VM); _classCallCheck(this, VM);
var vm = this;
if (model instanceof Observer || model instanceof VM) { if (model instanceof Observer || model instanceof VM) {
model = model.model; model = model.model;
} }
@ -900,39 +1029,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
} }
var state = this.state && this.state(); var state = this.state && this.state();
var keys = _.keys(this.$$model).concat(_.keys(state)).concat(_.keys(this.computed)); var keys = _.keys(this.$$model).concat(_.keys(state)).concat(_.keys(this.computed));
var props = {}; defineProps(this, keys);
var _loop = function _loop(i, len) {
var key = keys[i];
if (!(key in $$skipArray)) {
props[key] = {
enumerable: true,
configurable: true,
get: function get() {
if (vm.$$computed && key in vm.$$computed) {
return vm.$$computed[key];
}
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key];
}
return vm.$$model[key];
},
set: function set(val) {
if (vm.$$state && key in vm.$$state) {
return vm.$$state[key] = val;
}
if (vm.$$model && key in vm.$$model) {
return vm.$$model[key] = val;
}
}
};
}
};
for (var i = 0, len = keys.length; i < len; i++) {
_loop(i, len);
}
this.model = createViewModel$1({}, props);
this.$$model && (this.model.__ob__ = this.$$model.__ob__); this.$$model && (this.model.__ob__ = this.$$model.__ob__);
state && initState(this, state); state && initState(this, state);
initComputed(this, this.computed); initComputed(this, this.computed);
@ -1124,7 +1221,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
exports.define = define; exports.define = define;
exports.version = version; exports.version = version;
exports.$$skipArray = $$skipArray; exports.$$skipArray = $$skipArray;
exports.initState = initState;
exports.VM = VM; exports.VM = VM;
exports.observerState = observerState; exports.observerState = observerState;
exports.Observer = Observer; exports.Observer = Observer;

Loading…
Cancel
Save