【问题标题】:Dojo Dialog: show is not a functionDojo Dialog:显示不是函数
【发布时间】:2014-01-20 14:44:29
【问题描述】:

我有以下代码:

        function handlesomeObjDelete(someObj) {
            query('#someObj-delete-link-'+someObj.id).on('click',function(){
                var youSureDlg = new Dialog({
                    title: 'Delete someObj',
                    width:'250px',
                    id:'delete-someObj-dlg'+someObj.id,
                    content:'Are you sure you want to delete this someObj?'
                });

                var yesBtn = new Button({
                    label: 'Yes',
                    type: "button"
                }); 

                var noBtn = new Button({
                    label: 'No',
                    type: "button"
                }); 

                on(yesBtn,'click',function(){
                    request("someUrl/"+someObj.id, {
                        handleAs: "json",
                        type:'delete',
                        headers: {
                          "X-Requested-With": "",
                          "Content-Type": 'application/json; charset=utf-8'
                        }
                    }).then(function(){
                        alert('deleted');
                    });
                });

                on(noBtn,'click',function(){
                    youSureDlg.hide();
                });

                yesBtn.placeAt(youSureDlg);
                noBtn.placeAt(youSureDlg);

                //youSureDlg.startup();
                youSureDlg.show();
            });
        }

我收到以下错误:

TypeError: refNode is null
packs[name] = packageInfo;

TypeError: youSureDlg.show is not a function
dojoSniffConfig

我已包含 dijit.Dialog。如果我尝试再次创建对话框,我会得到:尝试使用 id==someid 注册小部件,但该 id 已注册

知道什么地方出了问题吗?

谢谢。

【问题讨论】:

  • 我在问题中添加了更大的上下文,也许它有帮助

标签: dojo


【解决方案1】:

尝试这样做:

                  if(!youSureDlg){
        var youSureDlg = new Dialog({
            title: 'Title',
            id: "someID",
            content: "",
            style: "width:250pt",
        });
        youSureDlg.show();
                   }

                   else {
                         youSureDlg.show();
                          }

Dialog 是独立的,它自己是一个单独的 Box,没有绑定到另一个 div 或其他东西。

看看这个:http://dojotoolkit.org/reference-guide/1.9/dijit/Dialog.html#dijit-dialog

希望对你有帮助。

更新1: 当您想要启动一个未删除或在使用后取消注册的小部件时,会出现错误“尝试注册....”。您可以通过检查小部件是否已经存在来处理此问题。检查我的代码 - 我已经更新了它。

还可以查看这个较早的帖子:Dojo dialog close event on X (top-right)Dojo and unregistering widgets

问候,米里亚姆

【讨论】:

  • 感谢您的回复。我已经尝试过了,但仍然没有运气。同样的“显示不是函数”错误。
  • 您是否尝试将 zindex 设置为更高的数字:: zIndex:100
【解决方案2】:

它似乎找不到您的源参考节点。 这是小部件代码锚定的位置。新对话框中的第二个参数 'yousuredlg' 应该是 html 中的实际 div。

例如

HTML

<div>
    <div id="yousuredlg"></div>
    <button id="goButton">Go</button>
</div>

JS

require(["dojo", "dijit", "dijit/Dialog", "dojo/on"], function (dojo, dijit, Dialog, on) {
    var youSureDlg;
    on(dojo.byId("goButton"), "click", function () {
        if (!youSureDlg) {
            youSureDlg = new Dialog({
                title: 'Title',
                width: '250px',
                id: 'someid',
                content: 'some content'
            }, 'yousuredlg');
        }
        youSureDlg.show();
    });

})

http://jsfiddle.net/d2sa5/

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多