假设我们有类似的东西:
var parent = parentView; // A View
var child = Alloy.createController('ChildView',{});
parent.add(child);
在ChildView.js控制器中:
function closeView(){
// remove ourself from parent how?
}
你能以某种方式这样做吗?从closeView()中移除子视图的父视图?
我可以解决它的方式,我猜是将{}选项中的父视图发送到子视图并在那里保留引用{parent:parentView}。然后在我的closeView()中执行parent.remove()....但还有其他方法吗?
答案 0 :(得分:4)
使用活动。所有Alloy控制器都会实现BackBone.Events
,因此在您创建子项时会向其附加close
事件并让父项删除该子项。
孩子应该只关注自己。了解它与父母的交互方式是泄漏信息而不是遵循良好的SOLID设计。维护本身将是一场噩梦,更不用说增长这种设计的精神开销了。
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');
}
答案 1 :(得分:0)
您希望将对父级的引用传递给子级,以使其正常工作,如您所述
var child = Alloy.createController('ChildView',{parentView: parent});
然后在子视图中:
function closeView(){
$.args.parentView.remove($.getView());
}
你可以通过让父母照顾它来反过来做到这一点:
在子视图中:
$.trigger('removeMe');
在父控制器中:
child.on('removeMe',function(){
parent.remove(child);
}