2011-07-07 78 views
0

所以我的第一个,虽然是,这增加了更多和更多的HTML元素是不长的路要走,我想出了这个解决方案如何以编程方式添加和使用元素(对话框,在这种情况下)

var Jaxi = { 
     CurrentLocation: '/', 
     showLoginDialog: function() { 
     dojo.place('<div data-dojo-type="dijit.Dialog" style="width:600px;" id="loginDialog"><div id="dialog-content"></div><a href="javascript:Jaxi.CloseDialog()">Close</div>', dojo.body()) 
      dojo.xhrGet({ 
       url: "/Account/SingIn?ReturnUrl=" + Jaxi.CurrentLocation, 
       load: function (result) { 
        dojo.byId("dialog-content").innerHTML = result; 
       } 
      }); 
      dojo.ready(function() { 
       dijit.byId("loginDialog").show(); 
      }); 
     }, 
     CloseDialog: function() { 
      dijit.byId("loginDialog").hide(); 
      dojo.destroy("loginDialog"); 
     } 
    }; 

它的工作..至少在某种程度上。对话框打开,但没有样式被添加。但是,我无法关闭对话框。 问题是如何使它工作?

回答

2

将div放入正文后,Dojo需要解析HTML以“注意”新小部件。当它注意到属性时,它说:“嘿,这是一个小部件,我需要将它变成一个美丽的对话框。”

showLoginDialog: function() { 
    dojo.place('<div data-dojo-type="dijit.Dialog" ....</div>', dojo.body()); 
    dojo.parser.parse(); 
    .... 

当然,你也必须确保你的身体标记有class="claro"(或您要使用的任何其他主题)。

这就是说,我个人认为这是一个有点混乱的方式来做一个对话框。你有点像编程式的声明式混合。我不确定你的意思是什么“我的第一个虽然是,添加更多,和更多的HTML元素是不是一种方式去”,但我个人认为混合HTML内的JavaScript使代码难以阅读。如果你想要一个干净的方式来分离HTML和Javascript,你可能想看看this sitepen article

相关问题