efront 4.22.16 → 4.22.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -113,7 +113,7 @@ function getWatchData(element) {
113
113
  var props = {};
114
114
  for (var key in $watches) {
115
115
  var data = element[key];
116
- props[key] = isObject(data) && !isFunction(data) && !isDate(data) && !isNode(data) ? extend(data instanceof Array ? [] : {}, data) : data;
116
+ props[key] = data;
117
117
  }
118
118
  return props;
119
119
  }
@@ -130,7 +130,7 @@ function rebuild(element, isFirstRender) {
130
130
  for (var k in props) {
131
131
  var current = element[k];
132
132
  var previous = props[k];
133
- if (shallowEqual(current, previous)) continue;
133
+ if (isSame(current, previous)) continue;
134
134
  if (!capture) capture = {};
135
135
  capture[k] = { current, previous };
136
136
  }
@@ -585,17 +585,34 @@ var createBinder2 = function (write, read) {
585
585
 
586
586
  var src2 = function (search) {
587
587
  var getter = createGetter(this, search);
588
- var savedValue;
588
+ var checkArrayProperties = /^\[[^\]]+\]$/.test(search);
589
+ var savedValue, savedLength;
590
+ // 非直传数组的数据源变动后,不再检查其所有属性是否相同,直接同步到组件,
591
+ // 直传数组的数据源以数组中的子项是否变动为准,
592
+ // 直传数组的判别标准为表达式以“[”开头以“]”结尾,且表达式中间不含“]”
589
593
  this.$renders.push(function () {
590
594
  var origin = getter(this);
591
- var temp = shallowClone(origin);
592
- if (isHandled(savedValue)) {
593
- if (shallowEqual(temp, savedValue, 1)) return;
595
+ if (isArray(origin)) {
596
+ if (isArray(savedValue)) {
597
+ if (isSame(origin, savedValue)) {
598
+ if (origin.length === savedLength) return;
599
+ }
600
+ else {
601
+ a: if (checkArrayProperties && origin.length === savedLength) {
602
+ for (var cx = 0, dx = savedLength; cx < dx; cx++) {
603
+ if (savedValue[cx] !== origin[cx]) break a;
604
+ }
605
+ return;
606
+ }
607
+ }
608
+ }
609
+ savedLength = origin.length;
610
+ savedValue = origin;
594
611
  }
595
612
  else {
596
- if (isSame(savedValue, temp)) return;
613
+ if (isSame(savedValue, origin)) return;
614
+ savedValue = origin;
597
615
  }
598
- savedValue = temp;
599
616
  if (!isHandled(origin) && !isHandled(this.src));
600
617
  else this.src = origin;
601
618
  cast(this, origin);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.22.16",
3
+ "version": "4.22.17",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {