假设我们有类似的东西:
var parent = parentView; // A View
var child = Alloy.createController('ChildView',{});
parent.add(child);
和childview.js控制器:
function closeView(){
// remove ourself from parent how?
}
您可以以某种方式执行此操作吗?从CloseView()从父母中删除孩子的视图?
我可以解决它的方法,我猜是在{}选项中的父视图中发送到ChildView,并将参考保留在其中{parent:parentview}。然后在我的CloseView()中执行parent.remove()...。但是还有其他方法吗?
使用事件。所有合金控制器都会实现BackBone.Events
,因此创建子时,将close
事件附加到它并让父母删除子。
孩子应该只关心自己。了解其与父母的互动方式正在泄漏信息,而不是遵循良好的固体设计。维护本身将是一场噩梦
父代码:
var parent = parentView; // A View
var child = Alloy.createController('ChildView',{});
child.on('close', function () {
parent.remove(child.getView());
});
parent.add(child.getView());
子代码:
function closeView(){
$.trigger('close');
}
您想将父母的引用传递给孩子,正如您提到的那样
var child = Alloy.createController('ChildView',{parentView: parent});
然后在Childview中:
function closeView(){
$.args.parentView.remove($.getView());
}
您也可以通过让父母照顾它来以相反的方式进行:
在ChildView:
$.trigger('removeMe');
在父控制器中:
child.on('removeMe',function(){
parent.remove(child);
}