Dojo小部件隐藏/放置

Dojo小部件隐藏/放置,dojo,Dojo,我已经创建了许多我自己的小部件。我有一个dom节点,我希望根据用户选择一次显示其中一个小部件。因此,我创建一个小部件,将其放置在dom节点并调用startup: this.widget1 = new MyWidget(); this.widget1.placeAt(this.theDomNode, "only"); this.widget1.startup(); 这一切都很好。widget1和DomNode是执行所有这些操作的对象的属性,因此“this”引用 稍后,我希望根据用户操作在那里显示

我已经创建了许多我自己的小部件。我有一个dom节点,我希望根据用户选择一次显示其中一个小部件。因此,我创建一个小部件,将其放置在dom节点并调用startup:

this.widget1 = new MyWidget();
this.widget1.placeAt(this.theDomNode, "only");
this.widget1.startup();
这一切都很好。widget1和DomNode是执行所有这些操作的对象的属性,因此“this”引用

稍后,我希望根据用户操作在那里显示不同的小部件,因此我对widget2重复完全相同的过程:

this.widget2 = new MyOtherWidget();
this.widget2.placeAt(this.theDomNode, "only");
this.widget2.startup();
这也行

当我想返回到以前的显示小部件时,就会出现问题。在这种情况下,我不会创建该小部件的新实例,因为它已经被实例化和引用(例如通过this.widget1等)。因此,我确实:

this.widget1.placeAt(this.theDomNode, "only");
this.widget1.startup();
但是,这只是清除domNode的内容,不显示widget1的内容。同样,当显示任何其他窗口小部件时,如果它不是直接跟随实例化的话。似乎当一个小部件在domNode中被另一个小部件替换时,它将丢失其dom,并且无法重复使用

有人知道如何解决这个问题是最好的方法吗?我想到的一个选项是为每个小部件设置一个domNode,然后将domNode本身的display属性更改为none以隐藏小部件,然后返回显示它。然而,在加入这个额外的级别之前,我想我会把这个问题抛出去,以防有更简单的方法来做

谢谢
Simon

我猜
placeat()
中使用的
“only”
选项造成了问题。你能检查你的代码删除“only”参数吗。或者,您可以尝试在放置下一个小部件之前清除(取消)domnode变量,例如
this.theDomNode.innerHTML=“”
当您放置新的小部件时,您正在销毁旧小部件的DOM,但小部件仍然存在。如果销毁小部件,然后在需要时重新创建它,可能会更好。。或者使用show/hide来代替谢谢,我想就像你说的@tik27,我正在破坏小部件DOM,所以没有什么需要重新显示的。我在替换widgets destroy()方法时故意调用它,然后在需要时重新创建它。这比更改为显示/隐藏方法更容易实现,尽管如果需要保留窗口小部件状态,那么这就是解决方法。您可能需要destroyRecursive()-参见此答案