[0]prefab不能获取子节点var属性
2.12.2版本,只有Scene.open的方式创建的节点可以获取子节点下的var属性,其实就是别的例如prefab.create和列表渲染子节点都没有给view传值。
目前修改方法是第一个节点创建之后就直接赋值给view,也就是最开始的父节点。
Laya.SceneUtils.createComp=function(uiView,comp,view,dataMap,initTool,alterRoot=false){
if (uiView.type=="Scene3D"||uiView.type=="Sprite3D"){
var outBatchSprits=[];
var scene3D=Laya["Utils3D"]["_createSceneByJsonForMaker"](uiView,outBatchSprits,initTool);
if (uiView.type=="Sprite3D")
Laya["StaticBatchManager"].combine(scene3D,outBatchSprits);
else
Laya["StaticBatchManager"].combine(null,outBatchSprits);
return scene3D;
}
comp=comp || Laya.SceneUtils.getCompInstance(uiView);
if(view==null){
view = comp;//修改部分
}
if (!comp){
if (uiView.props && uiView.props.runtime)
console.warn("runtime not found:"+uiView.props.runtime);
else
console.warn("can not create:"+uiView.type);
return null;
};
var child=uiView.child;
if (child){
var isList=comp["_$componentType"]=="List";
for (var i=0,n=child.length;i < n;i++){
var node=child[i];
if (comp.hasOwnProperty("itemRender")&& (node.props.name=="render" || node.props.renderType==="render")){
comp["itemRender"]=node;
}else if (node.type=="Graphic"){
Laya.ClassUtils["_addGraphicsToSprite"](node,comp);
}else if (Laya.ClassUtils["_isDrawType"](node.type)){
Laya.ClassUtils["_addGraphicToSprite"](node,comp,true);
}else {
if (isList){
var arr=[];
var tChild=Laya.SceneUtils.createComp(node,null,alterRoot?comp:view,arr,initTool);
if (arr.length) tChild["_$bindData"]=arr;
}else{
tChild=Laya.SceneUtils.createComp(node,null,alterRoot?comp:view,dataMap,initTool);
}
if (node.type=="Script"){
if ((tChild instanceof Laya.Component )){
comp._addComponentInstance(tChild);
}else {
if ("owner" in tChild){
tChild["owner"]=comp;
}else if ("target" in tChild){
tChild["target"]=comp;
}
}
}else if (node.props.renderType=="mask" || node.props.name=="mask"){
comp.mask=tChild;
}else {
(tChild instanceof Laya.Node )&& comp.addChild(tChild);
}
}
}
};
var props=uiView.props;
for (var prop in props){
var value=props[prop];
if ((typeof value=='string')&& (value.indexOf("@node:")>=0 || value.indexOf("@Prefab:")>=0)){
if (initTool){
initTool.addNodeRef(comp,prop,value);
}
}else{
Laya.SceneUtils["setCompValue"](comp,prop,value,view,dataMap);
}
}
if (comp._afterInited){
comp._afterInited();
}
if (uiView.compId && initTool && initTool["_idMap"]){
initTool["_idMap"][uiView.compId]=comp;
}
return comp;
}
目前修改方法是第一个节点创建之后就直接赋值给view,也就是最开始的父节点。
Laya.SceneUtils.createComp=function(uiView,comp,view,dataMap,initTool,alterRoot=false){
if (uiView.type=="Scene3D"||uiView.type=="Sprite3D"){
var outBatchSprits=[];
var scene3D=Laya["Utils3D"]["_createSceneByJsonForMaker"](uiView,outBatchSprits,initTool);
if (uiView.type=="Sprite3D")
Laya["StaticBatchManager"].combine(scene3D,outBatchSprits);
else
Laya["StaticBatchManager"].combine(null,outBatchSprits);
return scene3D;
}
comp=comp || Laya.SceneUtils.getCompInstance(uiView);
if(view==null){
view = comp;//修改部分
}
if (!comp){
if (uiView.props && uiView.props.runtime)
console.warn("runtime not found:"+uiView.props.runtime);
else
console.warn("can not create:"+uiView.type);
return null;
};
var child=uiView.child;
if (child){
var isList=comp["_$componentType"]=="List";
for (var i=0,n=child.length;i < n;i++){
var node=child[i];
if (comp.hasOwnProperty("itemRender")&& (node.props.name=="render" || node.props.renderType==="render")){
comp["itemRender"]=node;
}else if (node.type=="Graphic"){
Laya.ClassUtils["_addGraphicsToSprite"](node,comp);
}else if (Laya.ClassUtils["_isDrawType"](node.type)){
Laya.ClassUtils["_addGraphicToSprite"](node,comp,true);
}else {
if (isList){
var arr=[];
var tChild=Laya.SceneUtils.createComp(node,null,alterRoot?comp:view,arr,initTool);
if (arr.length) tChild["_$bindData"]=arr;
}else{
tChild=Laya.SceneUtils.createComp(node,null,alterRoot?comp:view,dataMap,initTool);
}
if (node.type=="Script"){
if ((tChild instanceof Laya.Component )){
comp._addComponentInstance(tChild);
}else {
if ("owner" in tChild){
tChild["owner"]=comp;
}else if ("target" in tChild){
tChild["target"]=comp;
}
}
}else if (node.props.renderType=="mask" || node.props.name=="mask"){
comp.mask=tChild;
}else {
(tChild instanceof Laya.Node )&& comp.addChild(tChild);
}
}
}
};
var props=uiView.props;
for (var prop in props){
var value=props[prop];
if ((typeof value=='string')&& (value.indexOf("@node:")>=0 || value.indexOf("@Prefab:")>=0)){
if (initTool){
initTool.addNodeRef(comp,prop,value);
}
}else{
Laya.SceneUtils["setCompValue"](comp,prop,value,view,dataMap);
}
}
if (comp._afterInited){
comp._afterInited();
}
if (uiView.compId && initTool && initTool["_idMap"]){
initTool["_idMap"][uiView.compId]=comp;
}
return comp;
}
没有找到相关结果
已邀请:
要回复问题请先登录
0 个回复