我正在尝试在Zend Framework中创建一个Dojo对话框,但我遇到了一些问题。我的视图代码看起来像这样:
<script type="text/javascript" src="<?= $this->baseUrl('/js/dojo-release-1.7.2/dojo/dojo.js')?>"
data-dojo-config="async: true" dojoConfig = "parseOnLoad: true">
</script>
<script>
require(["dijit/registry", "dojo/ready", "dojo/dom", "dijit/Dialog", "dijit/form/Form"],
function(registry, ready, dom, Dialog){
ready(function() {
createDialog = function(titleText, contentText) {
var node = dojo.byId("foobar");
var myDialog = new Dialog({ title:"From Source Node" }, node);
myDialog.show();
};
});
});
</script>
<body class="claro">
<div data-dojo-type="dijit/Dialog" id="foobar" title="Foo!" style="display: none">
<p>I am some content</p>
</div>
</body>
加载对话框的按钮代码如下:
<button name="btnDialog" id="dialogbtn" type="button" onclick='createDialog();'>Open</button>
第一次单击按钮时,对话框按预期打开,但是一旦对话框关闭并再次单击了按钮,对话框不打开,我在控制台中会出现以下错误。
尝试用ID == foobar注册小部件,但该ID已经注册。
我在做什么错?
谢谢
弄清楚了。我认为该表格无法正确解析,因为Dojo-Config不正确。更改JavaScript代码如下:
<script type="text/javascript" src="<?= $this->baseUrl('/js/dojo-release-1.7.2/dojo/dojo.js')?>"
data-dojo-config="async: true, parseOnLoad:true">
</script>
<script>
require(["dijit/registry", "dijit/Dialog"], function (registry)
{
createDialog = function createDialog()
{
registry.byId("foobar").show();
}
});
</script>
和DIV如下:
<body class="claro">
<div class="dijitHidden">
<div data-dojo-type="dijit.Dialog" data-dojo-props="title:'Foo!'" id="foobar">
<p>I am some content</p>
</div>
</div>
</body>
现在,对话框dijit保存到注册表,并且正在按预期工作