- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我查看了很多尝试添加内容/更改 Dojo 对话模板的链接。 This was the most promising.
但是,每当我做这样的事情时:
在 HTML 中声明的对话框:
<div class="djDialog" id="dgViewer" data-dojo-type="TemplatedDialog" data-dojo-props="title: 'My Dialog', draggable:false"></div>
对话框模板:
<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"></span>
<span data-dojo-attach-point="closeButtonNode" class="dijitDialogCloseIcon" data-dojo-attach-event="ondijitclick: onCancel" title="${buttonCancel}" role="button" tabIndex="-1">
<span data-dojo-attach-point="closeText" class="closeText" title="${buttonCancel}">x</span>
</span>
</div>
<!-- containerNode from original Dialog template -->
<div data-dojo-attach-point="containerNode" class="dijitDialogPaneContent">
<!-- All "custom" content -->
<div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'headline'" style="height:300px">
<div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
</div>
<div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
<button data-dojo-type="dijit.form.Button">Edit</button>
<button data-dojo-type="dijit.form.Button">Status</button>
</div>
</div>
<!-- End "custom" content -->
</div>
</div>
自定义对话框类:
define([
'dojo/_base/declare',
'dijit/Dialog',
'dijit/_TemplatedMixin',
'dojo/text!./dialog_templates/View.html'],
function(
declare,
Dialog,
_Mixin,
_template){
return declare('TemplatedDialog', [Dialog, _Mixin], {
templateString : _template,
constructor : function(){
}
})
})
在我的控制台(使用 Chrome)中,我只看到:
<div data-dojo-attach-point="containerNode" class="dijitDialogPaneContent" style="width: auto; height: auto; "></div>
...和内容应该所在的空节点。
到目前为止,我还没有发现任何人似乎已经成功地在模板方面扩展了 dijit.Dialog。这可能吗?
编辑
在此模板上尝试了一些变体之后:
<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"></span>
<span data-dojo-attach-point="closeButtonNode" class="dijitDialogCloseIcon" data-dojo-attach-event="ondijitclick: onCancel" title="${buttonCancel}" role="button" tabIndex="-1">
<span data-dojo-attach-point="closeText" class="closeText" title="${buttonCancel}">x</span>
</span>
</div>
<!-- containerNode from original Dialog template -->
<div class="dijitDialogPaneContent">
<div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'headline'" style="height:100%;width:100%">
<div data-dojo-attach-point="containerNode" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'"></div>
</div>
<div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'bottom'">
<button data-dojo-type="dijit.form.Button">Edit</button>
</div>
</div>
</div>
正在抛出错误 Uncaught TypeError: Cannot read property '0' of undefined
。这就是堆栈,如果有帮助的话。我正在使用来自 Google CDN 的未压缩版本来帮助调试。
_childElements dojo.js.uncompressed.js:8341
getStepQueryFunc dojo.js.uncompressed.js:8597
query dojo.js.uncompressed.js:9005
query dojo.js.uncompressed.js:5248
_2._checkIfSingleChild _ContentPaneResizeMixin.js:2
_4._size Dialog.js:2
_4.show Dialog.js:2
从 containerNode
中删除 data-dojo-type
和 -props
解决了这个问题,但它仍然没有让事情更接近于拥有一个工作自定义模板化对话框。
最佳答案
在内容 Pane 上进行模板化时遇到麻烦的原因是,无论您将模板内容放入由附加点 'containerNode' 引用的 domNode 中,您都将在启动时丢失。
如果没有设置 'href' 和 'content' 属性,它们将简单地设置为空字符串,从而留下 Dialog.containerNode.innerHTML == ""
您无需从 _TemplatedMixin 派生,因为对话框本身就是一个模板化的小部件。而是将其更改为 _WidgetsInTemplateMixin 以补偿 BorderContainer 布局小部件和您的 dijit.form 内容。此外,自定义模板中的标记应该是预先要求的,因此您可以在此处使用类似的内容:
将容器的旧附加点模板更改为此
<div data-dojo-attach-point="containerNode"
data-dojo-type="dijit.layout.ContentPane"
data-dojo-props="region:'center'">
然后向模板中的标记小部件添加要求加上 _WidgetsInTemplateMixin
:
define(["dijit/Dialog",
"dijit/_WidgetsInTemplateMixin",
"dojo/text!./dialog_templates/View.html",
// rest are for rendering example
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/form/Button"
}. ... );
结果应该是这样的,记住你的模板 View.html 的变化:
define([
'dojo/_base/declare',
'dijit/Dialog',
"dijit/_WidgetsInTemplateMixin",
"dojo/text!./dialog_templates/View.html",
// rest are for rendering example
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/form/Button"],
function(
declare,
Dialog,
_Mixin,
_template){
return declare('TemplatedDialog', [Dialog, _Mixin /*careful, widgetsintemplate is tricky*/ ], {
templateString : _template
})
})
您可以 fiddle here
编辑:
由于包含边框布局的对话框存在问题(无论如何也不是闻所未闻),这里有一个解决方法:
_checkIfSingleChild: function() {
delete this._singleChild;
domClass.toggle(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
},
templateString: '....'
我不确定后果,我认为如果您尝试以编程方式更改其内容和尺寸,您的边界布局可能会开始出现异常。但它会呈现 - 至少它在这里:updated fiddle
关于javascript - 向 dijit 对话框添加内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175601/
我的 Dojo 应用程序包含几个小部件,它们都在 dijit.registry(dijit.WidgetSet 的一个实例)中自动注册。我想利用 filter() ( Link ) 或 map() (
我使用的是 Dojo 工具包版本 1.3.1。我在 jsp 页面中定义了以下 dijit: Zoom In hi
我正在尝试以编程方式创建这样的布局: 我使用的是 dojo 1.7,布局初始化可能存在问题。 这是我的 attempt . 谢谢你帮助我 最佳答案 让BorderContainer设置 Dialog
我有一个包含模板化表单的dijit.dialog。当对话框可见并且我调整窗口大小时,表单高度会减小(即使我增加/减小窗口大小)。是什么导致了这种奇怪的行为以及如何防止它?谢谢。 代码:@LoginFo
我有一个菜单,其内容需要根据用户交互进行显着更改。这意味着需要引入一些新的菜单项,也需要删除一些菜单项。查看 Dojo 已发布的 API 文档,似乎没有一种方法可以在不删除现有项目并从头开始重新创建菜
我有以下小部件 HTML。 后面带有以下 Javascript: /** * Javascript for ExpandableSearchComponen
我正在尝试以编程方式将 dijit/布局/内容 Pane 添加到 dijit/标题 Pane 。我遇到的问题是我无法让内容 Pane 进入标题 Pane ,它被放置在它下面。我的代码是这样的:知道我做
我想要的是一个表单,在提交时运行验证检查,并突出显示所有无效字段并添加工具提示。 我正在有效地寻找这样的东西: dojo.forEach(dijit.byId('myForm')._invalidWi
我已经能够将带有两个 MenuItem 的简单 dijit.Menu 绑定(bind)到带有 Menu.bindDomNode(Tree.domNode) 的 dijit.Tree 的节点,但我想改进
我正在尝试对 dijit/Dialog 的默认行为进行简单的更改。我希望在单击底层(背景)时关闭对话框。 我在以前的 Dojo 化身中做过一次,但我很难用新的 AMD/requireJs 风格来做。
当您使用 dijit.ComboBox 时,提前输入建议将作为 dijit.Menu 实现。我有一个设计要求建议行的匹配部分是正常的,不匹配的部分是粗体。 dojo 创建的结构是这样的:
当我在客户端为我的一个应用程序进行验证时。我脑子里有这些问题。 问题一:dijit.byId('someId').value 和 dijit.byId('someId').get('value') 有
我正在尝试禁用使用 store 填充的 dijit/Form/FilteringSelect 控件中的选项。 遵循本指南:http://dojotoolkit.org/documentation/tu
如何使 titlePane 的高度动态变化,以便在页面加载后向 Pane 添加内容时 TitlePane 会展开? 最佳答案 看起来富内容编辑器是一个异步加载的 iframe 混淆了初始布局。 正如@
我似乎找不到一种方法来要求过滤选择输入具有一定的长度。我试过这样: new dijit.form.FilteringSelect({ 'name': 'bla', 'store': j
我对 Dojo 比较陌生,正在尝试掌握 dijit 的窍门。在此处查阅 Dojo 的 dijit/form/Button 小部件的文档后: http://dojotoolkit.org/referen
我有一个 Dijit Dialog (jsfiddle) 以编程方式创建。当调用对话框显示时,我会在运行时传递按钮的 id。我正在尝试创建单击事件函数,以在运行时为传递的 id 执行。 但是事件并未执
我有一个场景。在其中一个表单中,3 个一组中有 18 个字段,但一次只能有一组(3 个字段)具有值。任何人都可以告诉我如何以最好的方式做到这一点,是否有类似在 dijit 中创建字段组之类的事情?我可
我正在尝试声明一个 dijit TextBox,但我无法将 focus 事件附加到它。 我试过以声明的方式这样做: alert("hi");
我的对话框定义如下
我是一名优秀的程序员,十分优秀!