blend subviews of ListItemNode and SlideItemNode
This commit is contained in:
parent
1dba8d7b10
commit
d7d2af8065
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,10 +44,15 @@ public class ListNode extends SuperNode<RecyclerView> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void blendSubNode(JSObject subProperties) {
|
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) {
|
if (node != null) {
|
||||||
node.blend(subProperties.getProperty("props").asObject());
|
node.blend(subProperties.getProperty("props").asObject());
|
||||||
} else {
|
} else {
|
||||||
|
JSObject oldModel = getSubModel(viewId);
|
||||||
|
if (oldModel != null) {
|
||||||
|
recursiveMixin(subProperties, oldModel);
|
||||||
|
}
|
||||||
listAdapter.blendSubNode(subProperties);
|
listAdapter.blendSubNode(subProperties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,10 +77,15 @@ public class SliderNode extends SuperNode<RecyclerView> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void blendSubNode(JSObject subProperties) {
|
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) {
|
if (node != null) {
|
||||||
node.blend(subProperties.getProperty("props").asObject());
|
node.blend(subProperties.getProperty("props").asObject());
|
||||||
} else {
|
} else {
|
||||||
|
JSObject oldModel = getSubModel(viewId);
|
||||||
|
if (oldModel != null) {
|
||||||
|
recursiveMixin(subProperties, oldModel);
|
||||||
|
}
|
||||||
slideAdapter.blendSubNode(subProperties);
|
slideAdapter.blendSubNode(subProperties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user