- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用与 Dialog 相同的 templateString 设置自定义对话框,但添加 <div><div data-dojo-type="dijit/layout/ContentPane">Custom</div></div>
进入内容区域。
require([
"dojo/_base/declare",
"dojo/_base/lang",
"dojo/dom-construct",
"dijit/_WidgetsInTemplateMixin",
"dijit/Dialog"
], function (declare, lang, domConstruct, _WidgetsInTemplateMixin, Dialog) {
var CustomDialog = declare([Dialog, _WidgetsInTemplateMixin], {
templateString:
'<div class="dijitDialog" role="dialog" aria-labelledby="${id}_title">'+
'<div data-dojo-attach-point="titleBar" class="dijitDialogTitleBar">'+
'<span data-dojo-attach-point="titleNode" class="dijitDialogTitle" id="${id}_title"'+
'role="heading" level="1"></span>'+
'<span data-dojo-attach-point="closeButtonNode" class="dijitDialogCloseIcon" data-dojo-attach-event="ondijitclick: onCancel"'+
'title="${buttonCancel}" role="button" tabindex="0">'+
'<span data-dojo-attach-point="closeText" class="closeText"'+ 'title="${buttonCancel}">x</span>'+
'</span>'+
'</div>'+
' <div data-dojo-attach-point="containerNode" class="dijitDialogPaneContent">'+
'<div><div data-dojo-type="dijit/layout/ContentPane">Custom</div></div>'+
'</div>'+
'</div>' ,
constructor: function (args, srcNodeRef) {
lang.mixin(this, args);
},
});
var div = domConstruct.toDom("<div id='saveMapWidget'></div>");
domConstruct.place(div, document.body);
var widget = new CustomDialog({}, div);
widget.startup();
widget.show();
});
运行这段代码给我 TypeError: this.domNode is null
正在删除_WidgetsInTemplateMixin
使其能够正常工作。为什么模板小部件会导致此问题?
最佳答案
我已经编辑了我的回复,因为虽然我原来的回复是有效的,但正如 Shoe 指出的那样,这并不是导致问题的原因。对此感到抱歉。
我已经更仔细地追踪了这一点。发生的情况是,您的内部 ContentPane
实际上在对话框启动之前就被销毁了,然后当它确实尝试启动时,它会尝试启动已经销毁的内容内容 Pane 。但是,被销毁的小部件的 domNode
引用无效,并且 ContentPane
在其 startup
功能期间间接查看 domNode.parentNode
,这会导致错误。
IIUC,小部件首先被过早销毁的原因是因为您的对话框在 buildRendering
期间解析模板中的小部件,然后在 buildRendering
之后立即解析_applyAttributes
,Dialog
的 content
setter 最终会使用最初解析的内容进行调用,这最终会破坏最初解析的内容。实际上,您通过尝试在此处使用 _WidgetsInTemplateMixin
进行了双重解析。如果您在 containerNode
(这是 ContentPane
专门解析的节点)之外的某个位置呈现小部件,那么您可能不会遇到此问题。
FWIW,当我需要在对话框中放置自定义小部件时,我不喜欢摆弄整个对话框的模板,因此我采取相反的方法 - 我开发自定义小部件,然后只需设置对话框的content
到该自定义小部件的实例。这可能是您可以尝试的更直接的方法。
以下是小部件即内容方法的示例:http://jsfiddle.net/ddLp24wg/
您在对话框实际位于文档流内之前调用 startup
,并且子窗口小部件之一不希望出现这种情况。小部件的 startup
方法只能在小部件的 DOM 处于文档流中时调用,因为 startup
是创建生命周期中可以执行维度敏感逻辑的唯一 API。
对于对话框,无论如何,第一次调用 show
时都会自动调用 startup
(因为预计在此之前它不会进入流程),所以你根本不需要自己调用它。
此外,我不确定您到目前为止是否只进行了测试,但如果您扩展模板以添加 ContentPane
,那就太过分了 - Dialog
一开始就已经扩展了 ContentPane
,因此您基本上已经有了一个。
关于javascript - 扩展Dialog时"this.domNode is null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25334636/
这个附加过程工作正常: document.getElementById('x').appendChild( document.importNode(node, true) ) 但是当我尝试 jQue
我正在尝试使用 jquery 加载 dojo 图表。我正在使用这段代码。但是在第二次单击时,在第一个按钮中出现此错误。如果我单击第一个按钮,单击第二个按钮,然后再次单击第一个按钮,也会发生同样的情况。
我有一个具有某些属性的 DOMNode 对象。 $Node->attributes 是一个 DOMNamedNodeMap,它没有删除映射中的条目之一的方法。 DOMNode 类也没有从元素中删除属性
我正在尝试使用与 Dialog 相同的 templateString 设置自定义对话框,但添加 Custom进入内容区域。 require([ "dojo/_base/declare",
我正在尝试替换所有 DOMDocument 中带有 的元素元素。做到这一点的最好方法似乎是捕获所有 使用 getElementsByTagName 元素,然后创建新元素来替换它们。 问题是,我看不
当获取在 nodeValue 中有实体的 DOMNode 对象的 nodeValue(即 a & gt;)时,它将实体转换为它的可打印字符(即 >) 有没有人知道一种方法可以让它保持作为一个实体,当它
我需要一种方法来识别对象(DOMNode 类型)的属性是否发生了更改(或者被创建或删除,可选)。 我有一个 INPUT 元素,并且在修改属性 .value 时必须收到通知。问题是没有有一个 attr
假设我的组件有一个 DOMNode(就像 一样简单),另一个组件也可以控制它。 有什么方法可以防止其他组件通过 JS 设置样式属性? 例如,我设置了domNode.style.color = "bl
我正在尝试在我的 html 字符串中插入节点。我的目标是在每个 h2 标签之前插入一个元素。 为此,我正在使用: $htmlString = "some html"; $DOM = new DOMDo
我对如何重新排序节点有点困惑。我正在尝试添加两个简单的“向上移动项目”和“向下移动项目”功能。虽然 insertBefore() 做了我想在前一个节点之前移动同级节点的操作,但在 DOM 中向下移动一
我正在使用 xpath 表达式来确定我的 DOM 树中的某个 div 类(感谢 VolkerK!)。 foreach($xpath->query('//div[@class="posts" and d
我使用 Xerces C++ API 编写了一个 XML 解析器。我有获取似乎间歇性工作的节点值的方法,我不确定为什么。 我是 XML 的新手,如果我的行话不正确,请原谅我。 例如,我可以像下面这样成
我对这两个术语感到困惑。浏览器端javascript编程有什么区别?我使用dojo作为框架。并且只有domNode的概念。但浏览器调试器总是告诉我一些 htmlelement 的信息。它们只是同一个东
我正在动态创建一个 XML 文档。我需要知道我刚刚创建的节点的 XPath。我没有看到像 DOMNode::calculateXPath(void):string 这样的函数我不愿意自己写一个。是否有
如何从 HTML 片段的字符串创建 DOMNode,当然假设该字符串包含单个根节点? 最佳答案 DOMDocumentFragments 确实有一个loadXML() 方法 libxml_use_in
我目前正在尝试使用 DOMDocument 解析文档,但遇到了一些严重的问题。我创建了一个在 php 5.2.9 上运行良好的脚本,使用 DOMNode::nodeValue 删除内容。相同的脚本无法
我一直在尝试像这样合并两个 XML 文档: $def = new DOMDocument( '1.0' ); $rdef = new DOMDocument( '1.0' ); $def->load
例如我有两个 DOMNode: 让node1 = document.querySelector('#node-1'); 让node2 = document.querySelector('#node-2
所以这是行不通的: foreach ($element->attributes as $attribute) { $element->removeAttribu
我想将 DOMNode 对象从对 getElementsByTagName() 的调用转换为 DOMElement 以便访问像 这样的方法getElementsByTagName() 在子元素上。在任
我是一名优秀的程序员,十分优秀!