feat: support _refExt for external context injection
This commit is contained in:
parent
548afb97ed
commit
b8652c357e
19
dist/state.js
vendored
19
dist/state.js
vendored
@ -285,11 +285,23 @@ function _updateBinding(binding) {
|
|||||||
if (existingNodes) {
|
if (existingNodes) {
|
||||||
node._keyedNodes.delete(keyVal);
|
node._keyedNodes.delete(keyVal);
|
||||||
existingNodes.forEach((child) => {
|
existingNodes.forEach((child) => {
|
||||||
child._ref[indexName] = k;
|
if (window.__statePerformanceTelemetry) window.__statePerformanceTelemetry.reuseCount++;
|
||||||
if (child._ref[asName] !== item) {
|
let scopeChanged = false;
|
||||||
|
for (let key in node._ref) {
|
||||||
|
if (key === asName || key === indexName) continue;
|
||||||
|
if (child._ref[key] !== node._ref[key]) {
|
||||||
|
child._ref[key] = node._ref[key];
|
||||||
|
scopeChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const indexChanged = child._ref[indexName] !== k;
|
||||||
|
if (indexChanged) child._ref[indexName] = k;
|
||||||
|
if (child._ref[asName] !== item || scopeChanged) {
|
||||||
child._ref[asName] = item;
|
child._ref[asName] = item;
|
||||||
|
if (window.__statePerformanceTelemetry) window.__statePerformanceTelemetry.scanCount++;
|
||||||
_scanTree(child, { thisObj: node._thisObj, extendVars: child._ref });
|
_scanTree(child, { thisObj: node._thisObj, extendVars: child._ref });
|
||||||
} else if (node.parentNode.lastChild !== child) {
|
} else if (node.parentNode.lastChild !== child) {
|
||||||
|
if (window.__statePerformanceTelemetry) window.__statePerformanceTelemetry.moveCount++;
|
||||||
node.parentNode.insertBefore(child, node);
|
node.parentNode.insertBefore(child, node);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -510,6 +522,9 @@ const _scanTree = (node, scanObj = {}) => {
|
|||||||
while (curr && curr._ref === void 0) curr = curr.parentNode;
|
while (curr && curr._ref === void 0) curr = curr.parentNode;
|
||||||
node._ref = curr ? { ...curr._ref } : {};
|
node._ref = curr ? { ...curr._ref } : {};
|
||||||
}
|
}
|
||||||
|
if (node._refExt !== void 0) {
|
||||||
|
Object.assign(node._ref, node._refExt);
|
||||||
|
}
|
||||||
if (scanObj.extendVars) Object.assign(node._ref, scanObj.extendVars);
|
if (scanObj.extendVars) Object.assign(node._ref, scanObj.extendVars);
|
||||||
_parseNode(node, scanObj);
|
_parseNode(node, scanObj);
|
||||||
const nodes = [...node.childNodes || []];
|
const nodes = [...node.childNodes || []];
|
||||||
|
|||||||
2
dist/state.min.js
vendored
2
dist/state.min.js
vendored
File diff suppressed because one or more lines are too long
@ -137,7 +137,7 @@ export function _updateBinding(binding) {
|
|||||||
}
|
}
|
||||||
const indexChanged = child._ref[indexName] !== k;
|
const indexChanged = child._ref[indexName] !== k;
|
||||||
if (indexChanged) child._ref[indexName] = k;
|
if (indexChanged) child._ref[indexName] = k;
|
||||||
|
|
||||||
if (child._ref[asName] !== item || scopeChanged) {
|
if (child._ref[asName] !== item || scopeChanged) {
|
||||||
child._ref[asName] = item;
|
child._ref[asName] = item;
|
||||||
if (window.__statePerformanceTelemetry) window.__statePerformanceTelemetry.scanCount++;
|
if (window.__statePerformanceTelemetry) window.__statePerformanceTelemetry.scanCount++;
|
||||||
@ -357,6 +357,9 @@ export const _scanTree = (node, scanObj = {}) => {
|
|||||||
while (curr && curr._ref === undefined) curr = curr.parentNode;
|
while (curr && curr._ref === undefined) curr = curr.parentNode;
|
||||||
node._ref = curr ? { ...curr._ref } : {};
|
node._ref = curr ? { ...curr._ref } : {};
|
||||||
}
|
}
|
||||||
|
if (node._refExt !== undefined) {
|
||||||
|
Object.assign(node._ref, node._refExt);
|
||||||
|
}
|
||||||
if (scanObj.extendVars) Object.assign(node._ref, scanObj.extendVars);
|
if (scanObj.extendVars) Object.assign(node._ref, scanObj.extendVars);
|
||||||
|
|
||||||
_parseNode(node, scanObj);
|
_parseNode(node, scanObj);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user