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
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user