Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
View Appcelerator-如果在子视图上发生问题,则通知父视图_View_Parameters_Parameter Passing_Parent Child_Appcelerator - Fatal编程技术网

View Appcelerator-如果在子视图上发生问题,则通知父视图

View Appcelerator-如果在子视图上发生问题,则通知父视图,view,parameters,parameter-passing,parent-child,appcelerator,View,Parameters,Parameter Passing,Parent Child,Appcelerator,如何在父视图上获取有关子视图事件的信息 例如: 我将和参数传递给子对象(Alloy.createController('myChildView',{info:test}).getView()。然后我使用它并将全局变量从false设置为true(Alloy.Globals.childPrecessed=true)。在那之后,我可以在这个视图上花费任何时间,但是当我点击一个触发隐藏事件的按钮时,我应该处理来自父视图的信息 我的第一个想法是启动az appwide事件(myChildHide),并在父

如何在父视图上获取有关子视图事件的信息

例如:

我将和参数传递给子对象(Alloy.createController('myChildView',{info:test}).getView()。然后我使用它并将全局变量从false设置为true(Alloy.Globals.childPrecessed=true)。在那之后,我可以在这个视图上花费任何时间,但是当我点击一个触发隐藏事件的按钮时,我应该处理来自父视图的信息

我的第一个想法是启动az appwide事件(myChildHide),并在父视图中侦听它。如果我抓到了,我会处理这些信息,然后摧毁听者

这是最好的方法吗?我不确定

有没有更好的解决办法


谢谢

我是活动听众的粉丝,所以我认为你的方法很好

我通常做的是在需要事件侦听器生效之前启动它,即在打开子窗口的方法中。但首先,我使用主干事件进行简单的事件触发。看见因此,假设您已经设置了一个“调度器”,那么我会这样做:

function openChild(){
   dispatcher.on("child-calling", doChildsWork);
   // ... open child view
}
function doChildsWork(){
   // ... Tell parent to do some work
   dispatcher.trigger("child-calling",{test:true});
   // ... continue whatever is going on in child
}
然后在
doChildsWork
中,一旦调用,我将禁用事件处理程序:

function doChildsWork(args){
   dispatcher.off("child-calling");
   // ... do work initiated by child view using args...
}
最后,在子视图中(假设您已经设置了“dispatcher”),您将执行以下操作:

function openChild(){
   dispatcher.on("child-calling", doChildsWork);
   // ... open child view
}
function doChildsWork(){
   // ... Tell parent to do some work
   dispatcher.trigger("child-calling",{test:true});
   // ... continue whatever is going on in child
}
我经常使用这种方法,而且效果很好:)


/约翰

我是活动听众的粉丝,所以我认为你的方法很好

我通常做的是在需要事件侦听器生效之前启动它,即在打开子窗口的方法中。但首先,我使用主干事件进行简单的事件触发。看见因此,假设您已经设置了一个“调度器”,那么我会这样做:

function openChild(){
   dispatcher.on("child-calling", doChildsWork);
   // ... open child view
}
function doChildsWork(){
   // ... Tell parent to do some work
   dispatcher.trigger("child-calling",{test:true});
   // ... continue whatever is going on in child
}
然后在
doChildsWork
中,一旦调用,我将禁用事件处理程序:

function doChildsWork(args){
   dispatcher.off("child-calling");
   // ... do work initiated by child view using args...
}
最后,在子视图中(假设您已经设置了“dispatcher”),您将执行以下操作:

function openChild(){
   dispatcher.on("child-calling", doChildsWork);
   // ... open child view
}
function doChildsWork(){
   // ... Tell parent to do some work
   dispatcher.trigger("child-calling",{test:true});
   // ... continue whatever is going on in child
}
我经常使用这种方法,而且效果很好:)


/约翰

投票支持福克的文章。我会使用callback或controller.on/controller.trigger。非常详细的答案,很棒的文章,谢谢你,John!:)投票支持福克的文章。我会使用callback或controller.on/controller.trigger。非常详细的答案,很棒的文章,谢谢你,John!:)