如何从 appcelerator titanium 中的父项中删除视图

How to remove a view from parent in appcelerator titanium

假设我们有这样的事情:

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()...。但是还有其他方法吗?

如您所述,您希望将对父项的引用传递给子项以使其工作

var child = Alloy.createController('ChildView',{parentView: parent});

然后在子视图中:

function closeView(){
    $.args.parentView.remove($.getView());
}

您也可以反过来,让家长照顾它:

在子视图中:

$.trigger('removeMe');

在父控制器中:

child.on('removeMe',function(){
    parent.remove(child);
}

使用事件。所有 Alloy 控制器都实现 BackBone.Events,因此当您创建 child 时,将 close 事件附加到它并让 parent 删除 child。

child 应该只关心它自己。了解它如何与其 parent 交互是在泄露信息,而不是遵循良好的 SOLID 设计。维护本身就是一场噩梦,更不用说发展这种设计的精神开销了。

Parent代码:

var parent = parentView; // A View
var child = Alloy.createController('ChildView',{});
child.on('close', function () {
  parent.remove(child.getView());
});
parent.add(child.getView());

Child代码:

function closeView(){
  $.trigger('close');
}