如何从appcelerator钛中删除父视图

时间:2016-06-15 14:19:09

标签: titanium appcelerator

假设我们有类似的东西:

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

2 个答案:

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