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.
- package/coms/zimoli/render.js +25 -8
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/zimoli/render.js
CHANGED
|
@@ -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] =
|
|
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 (
|
|
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
|
|
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
|
-
|
|
592
|
-
|
|
593
|
-
|
|
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,
|
|
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);
|