blend subviews of ListItemNode and SlideItemNode

This commit is contained in:
pengfei.zhou 2019-11-19 15:45:55 +08:00
parent 1dba8d7b10
commit d7d2af8065
3 changed files with 41 additions and 2 deletions

View File

@ -148,4 +148,33 @@ public abstract class SuperNode<V extends View> extends ViewNode<V> {
}
}
private boolean viewIdIsEqual(JSObject src, JSObject target) {
String srcId = src.asObject().getProperty("id").asString().value();
String targetId = target.asObject().getProperty("id").asString().value();
return srcId.equals(targetId);
}
protected void recursiveMixin(JSObject src, JSObject target) {
JSObject srcProps = src.getProperty("props").asObject();
JSObject targetProps = target.getProperty("props").asObject();
for (String key : srcProps.propertySet()) {
JSValue jsValue = srcProps.getProperty(key);
if ("subviews".equals(key) && jsValue.isArray()) {
JSValue[] subviews = jsValue.asArray().toArray();
for (JSValue subview : subviews) {
JSValue oriSubviews = targetProps.getProperty("subviews");
if (oriSubviews.isArray()) {
for (JSValue targetSubview : oriSubviews.asArray().toArray()) {
if (viewIdIsEqual(subview.asObject(), targetSubview.asObject())) {
recursiveMixin(subview.asObject(), targetSubview.asObject());
break;
}
}
}
}
continue;
}
targetProps.asObject().setProperty(key, jsValue);
}
}
}

View File

@ -44,10 +44,15 @@ public class ListNode extends SuperNode<RecyclerView> {
@Override
protected void blendSubNode(JSObject subProperties) {
ViewNode node = getSubNodeById(subProperties.getProperty("id").asString().value());
String viewId = subProperties.getProperty("id").asString().value();
ViewNode node = getSubNodeById(viewId);
if (node != null) {
node.blend(subProperties.getProperty("props").asObject());
} else {
JSObject oldModel = getSubModel(viewId);
if (oldModel != null) {
recursiveMixin(subProperties, oldModel);
}
listAdapter.blendSubNode(subProperties);
}
}

View File

@ -77,10 +77,15 @@ public class SliderNode extends SuperNode<RecyclerView> {
@Override
protected void blendSubNode(JSObject subProperties) {
ViewNode node = getSubNodeById(subProperties.getProperty("id").asString().value());
String viewId = subProperties.getProperty("id").asString().value();
ViewNode node = getSubNodeById(viewId);
if (node != null) {
node.blend(subProperties.getProperty("props").asObject());
} else {
JSObject oldModel = getSubModel(viewId);
if (oldModel != null) {
recursiveMixin(subProperties, oldModel);
}
slideAdapter.blendSubNode(subProperties);
}
}