0

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はすでに登録されています。

私は何が間違っているのですか?

ありがとう

4

1 に答える 1

0

理解した。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がレジストリに保存され、期待どおりに機能します。

于 2012-11-03T09:33:08.453 に答える