Titanium 如何在appcelerator中从父视图中删除视图

Titanium 如何在appcelerator中从父视图中删除视图,titanium,appcelerator,Titanium,Appcelerator,假设我们有这样的东西: var parent = parentView; // A View var child = Alloy.createController('ChildView',{}); parent.add(child); 在ChildView.js控制器中: function closeView(){ // remove ourself from parent how? } child.on('removeMe',function(){ parent.remov

假设我们有这样的东西:

var parent = parentView; // A View
var child = Alloy.createController('ChildView',{});
parent.add(child);
在ChildView.js控制器中:

function closeView(){
    // remove ourself from parent how?
}
child.on('removeMe',function(){
    parent.remove(child);
}
你能做到吗?从closeView()中删除其父视图中的子视图


我想解决这个问题的方法是将{}选项中的parent视图发送到childview,并在那里保留一个引用{parent:parentView}。然后执行一个parent.remove()。。。在我的closeView()中。但是还有其他方法吗?

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

var child = Alloy.createController('ChildView',{parentView: parent});
然后在儿童视图中:

function closeView(){
    $.args.parentView.remove($.getView());
}
$.trigger('removeMe');
你也可以用另一种方式,让父母照顾它:

在儿童视图中:

function closeView(){
    $.args.parentView.remove($.getView());
}
$.trigger('removeMe');
在父控制器中:

function closeView(){
    // remove ourself from parent how?
}
child.on('removeMe',function(){
    parent.remove(child);
}

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

var child = Alloy.createController('ChildView',{parentView: parent});
然后在儿童视图中:

function closeView(){
    $.args.parentView.remove($.getView());
}
$.trigger('removeMe');
你也可以用另一种方式,让父母照顾它:

在儿童视图中:

function closeView(){
    $.args.parentView.remove($.getView());
}
$.trigger('removeMe');
在父控制器中:

function closeView(){
    // remove ourself from parent how?
}
child.on('removeMe',function(){
    parent.remove(child);
}

使用事件。所有Alloy控制器都实现
主干。事件
,因此,在创建子项时,将
关闭
事件附加到它,并让父项删除子项

孩子应该只关心自己。了解它如何与其父级交互是在泄露信息,而不是遵循良好的实体设计。维护本身将是一场噩梦,更不用说这种设计所带来的精神负担了

父代码: 子代码:
使用事件。所有Alloy控制器都实现
主干。事件
,因此,在创建子项时,将
关闭
事件附加到它,并让父项删除子项

孩子应该只关心自己。了解它如何与其父级交互是在泄露信息,而不是遵循良好的实体设计。维护本身将是一场噩梦,更不用说这种设计所带来的精神负担了

父代码: 子代码:
不,这不是个好主意!这混淆了关注点之间的分离,并且是不牢固的。甚至文档都使用事件来描述这种事情!不,这不是个好主意!这混淆了关注点之间的分离,并且是不牢固的。甚至文档都使用事件来描述这种事情!效果很好。虽然我必须执行parent.add(child.getView())和parent.remove(child.getView())操作,但这样做比传递回调要好得多。然而,根据下面的文章,创建Alloy控制器的引用是不好的做法。即“var child=Alloy.createController…”。但是,一次完成这一切似乎是可行的!例如:“parent.add(Alloy.createController('ChildView,{}”).on('close',function(){parent.remove(this.getView());});效果很好。尽管我必须执行parent.add(child.getView())和parent.remove(child.getView())实际上,这种方式比传递回调要好得多。然而,根据下面的文章,创建对Alloy控制器的引用是一种不好的做法,即“var child=Alloy.createController…”。不过,一次完成这一切似乎是可行的!例如:“parent.add(Alloy.createController('ChildView,{})。on('close',function(){parent.remove(this.getView());});