使用href属性时,操作栏未在dijit对话框中显示

时间:2014-01-31 12:30:59

标签: dojo

我有以下代码

var dlg = new dijit.Dialog({
        "title": "my dialog",
        "style": "width: 800px;",
        "id": "myDlg",
        "href":"some url"
    }).placeAt(dojo.body());


    var actionBar = dojo.create("div", {
        "class": "dijitDialogPaneActionBar"
    }, dlg.containerNode);

    new dijit.form.Button({
        "label": "Ok"
    }).placeAt(actionBar);
    new dijit.form.Button({
        "label": "Cancel"
    }).placeAt(actionBar);

    dlg.show();

这个代码对话框显示的是url内容但是动作栏没有显示,当我用一些静态内容替换href时,动作栏工作正常。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

对dojo对话框使用“href”时,每次打开/显示对话框时,href中的内容都会加载为ajax调用。所以,这里发生的是首先添加操作栏和按钮,然后将href加载到Dialog中,它会覆盖现有的操作栏和按钮-EVERYTIME !! 因此,为了实现这一点,您可以确保在href加载完成后添加操作栏。为此,我们使用“show”方法返回的Deferred对象。

var dlg = new dijit.Dialog({
    "title": "my dialog",
    "style": "width: 800px;",
    "id": "myDlg",
    "href":"some url"
}).placeAt(dojo.body());

dlg.show().then(function() {
  if(dlg.firstTime) {
     var actionBar = dojo.create("div", {
        "class": "dijitDialogPaneActionBar"
     }, dlg.containerNode);

     new dijit.form.Button({
       "label": "Ok"
     }).placeAt(actionBar);
     new dijit.form.Button({
       "label": "Cancel"
     }).placeAt(actionBar);
     dlg.firstTime=true;
   }
});

但是,我建议不要使用这种方法,因为每次都要创建动作栏和按钮小部件。所以,我已经在对话框对象中添加了一个参数“firstTime”来避免它。因此,操作栏和按钮只能打包一次。 希望这会有所帮助。