如何在Appcelerator钛中删除父母的视图



假设我们有类似的东西:

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);
}

最新更新