Appcelerator - 如果在子视图上发生某些事情,则通知父视图

时间:2016-04-07 07:26:13

标签: view parameters parameter-passing parent-child appcelerator

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

例如:

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

我的第一个想法是我激活az appwide事件(myChildHide),并在父视图中监听它。如果我抓住它,那么我处理信息,并销毁听众...

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

有没有更好的解决方案?

谢谢!

1 个答案:

答案 0 :(得分:2)

我是活动听众的粉丝,所以我觉得你的方法很好。

我通常做的是在我需要它之前启动事件监听器,即在打开子窗口的方法中。但首先我使用骨干事件进行简单的事件触发。见Fokke Zandbergen's article for further info。所以假设你已经设置了一个“调度员”,那么我会做这样的事情:

function openChild(){
   dispatcher.on("child-calling", doChildsWork);
   // ... open child view
}

然后在doChildsWork中,我会在调用后禁用事件处理程序:

function doChildsWork(args){
   dispatcher.off("child-calling");
   // ... do work initiated by child view using args...
}

最后在子视图中(假设您已经设置了“调度程序”),您可以执行以下操作:

function doChildsWork(){
   // ... Tell parent to do some work
   dispatcher.trigger("child-calling",{test:true});
   // ... continue whatever is going on in child
}

我经常使用这种方法 - 效果很好: - )

/约翰