Dojo 1.6对话框小部件丢失内容附加点

时间:2011-04-07 09:18:12

标签: javascript dojo dialog nested

我们最近将一个项目从Dojo 1.5升级到1.6 [基本的IE9支持]和我们的小部件。我们有一个对话框控件[dijit.Dialog]与内它的另一个小部件[这里的任何部件将产生相同的行为],预期的行为是内部部件放置对话框控件的contentNode内,并且他们的每一个attachpoints的是通过主要小部件提供。

这不会发生,而是我们只找到对话框的附加点。更多详情如下:

我们在主要小部件的模板中做了类似的事情:

<div dojoType="dijit.Dialog" dojoAttachPoint="dia_widget" 
    autofocus="true" draggable="false" open="false" preventCache="true">
    <div dojoType="dijit.form.ValidationTextBox" doLayout="false" dojoAttachPoint="val_widget">

    </div>
</div>

这为我们提供了一个父插件[main_widget]具有两个连接点:通过调用dia_widget和val_widget,其可以在主窗口部件[所述buildRendering()函数后]内被访问的this.dia_widgetthis.val_widget分别。

升级到1.6.0后出现问题。

我的猜测是,当对话框窗口小部件被解析时,它会将其内容的domNode删除到其新的containerNode中。当rootnode分配了附加点时,由于domNode不再可用,因此不会添加。

我一直在调试,我可以在dijit / _Templated.js中看到buildRendering()调用_attachTemplateNodes()。这会遍历窗口小部件中的节点,查找其dojoattachpoint属性并将其推送到窗口小部件的_attachpoints属性中。

第一个循环有两个节点[我们的dia_widget和val_widget]节点。此时,它开始单独解析每个节点,首先调用dia_widget上的buildRendering()并查找其所有子节点的附加点。

在某些时候,main_widget的dom被修改为包含解析/渲染的dia_widget。循环然后返回到主节点_attachTemplateNodes()调用,它只能看到dia_widget作为子节点,已经失去了val_widget条目。由于找不到节点,因此它永远不会作为附加点添加到main_widget中,我们无法在线下访问它。

我希望这不是太令人费解跟随,我是新来的道场,并通过萤火代码追逐是不是在世界上最有趣的经验,所以我写的东西了,因为他们是有意义的我。

我在想为什么行为从1.5变化到1.6,这是一个简单的功能/参数我要传递给对话框的行为之前一样?这是我创建嵌套小部件的方式中的错误吗?这是dojo本身的[已知?]错误吗?

谢谢,
VIC

1 个答案:

答案 0 :(得分:0)

1.6.0中有一些更改可能会为动态加载的内容添加“lang”属性。有时这个“lang”属性值未定义并导致问题。

查看您是否遇到“lang”属性问题 - 如果是这样,这可能会随1.6.1而消失。