【问题标题】:Dojo 1.6 dialog widget losing content attachpointsDojo 1.6 对话框小部件丢失内容附加点
【发布时间】:2011-04-07 09:18:11
【问题描述】:

我们最近将一个项目从 Dojo 1.5 升级到了 1.6 [为了基本的 IE9 支持] 并且它损坏了我们的一个小部件。我们有一个对话框小部件 [dijit.Dialog],其中包含另一个小部件 [这里的任何小部件都会产生相同的行为],预期的行为是将内部小部件放置在对话框小部件的 contentNode 中,并且它们的每个附加点都是可通过主小部件获得。

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

我们在主窗口小部件的模板中做这样的事情:

<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,可以通过分别调用 this.dia_widgetthis.val_widget 在主小部件 [在 buildRendering() 函数之后] 访问它们。

升级到 1.6.0 后出现问题。

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

我一直在调试,据我所见,buildRendering() 在 dijit/_Templated.js 中调用了_attachTemplateNodes()。这将遍历小部件中的节点,查找它们的 dojoattachpoint 属性并将它们推送到小部件的 _attachpoints 属性中。

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

这里 main_widget 的 dom 被修改为包含已解析/渲染的 dia_widget。然后循环返回到主节点_attachTemplateNodes() 调用,它只将 dia_widget 视为子节点,丢失了 val_widget 条目。由于未找到该节点,因此它永远不会作为附加点添加到 main_widget 中,并且我们无法访问它。

我希望这不会太令人费解,我是 Dojo 的新手,在 firebug 中追逐代码并不是世界上最有趣的体验,所以我写了一些有意义的东西我。

我想知道为什么行为会从 1.5 变化到 1.6,这仅仅是我应该传递给对话框以使其行为像以前一样的功能/参数吗?这是我创建嵌套小部件的方式中的错误吗?这是道场本身的 [已知?] 错误吗?

谢谢,
维克

【问题讨论】:

  • 在 #dojo 中 wuhi 的帮助下进行了更多调查:仅当小部件使用 dojox.dtl._Templated 时才会出现这种情况,它适用于 dijit._Templated

标签: javascript dojo dialog nested


【解决方案1】:

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

查看您是否在使用“lang”属性时遇到问题——如果是,这可能会在 1.6.1 中消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多