以编程方式动态添加按钮上的dijit ...如何?

问题描述:

我遇到了另一个我正在开发的dojo启用窗体的问题。用户可以通过使用对话框输入数据在页面上输入详细信息,对话框依次更新数据库,然后显示输入到表单上的用户数据。以编程方式动态添加按钮上的dijit ...如何?

添加的每个元素包含2个验证文本框1个FilteringSelect。当它被添加到页面中时,它们被添加为简单的文本框。

我试过只是添加为标准字符串,但这意味着dojo.parse()不会在代码上运行。我也尝试以编程方式添加元素,但只是将元素对象显示为字符串到页面。到目前为止,我有:

var xhrArgs = { 
    url: url, 
    handleAs: "text", 
    preventCache: true, 
    load: function(data){ 

     var idResult = parseInt(data); 

     if(idResult > 0){ 


      var divStr = '<div id="employ_' + idResult + '" style="float:left;width:100%;">' + 
      '<table width="300">' + 
       '<tr>' + 
        '<td height="29"><Strong>' + 
          '<input type="text" dojoType="dijit.form.ValidationTextBox ' + 
           'change="markEmploymentForUpdate(); ' + 
           'id="cmpy_'+ idResult +'" '+ 
           'required="true" ' + 
           'promptMessage="Please enter a valid company name" ' + 
           'invalidMessage="please enter a valid company name" ' + 
           'trim="true"' + 
           'value="'+ companyname +'"/>' + 
        '</td>' + 
        '<td height="29"><input dojoType="dijit.form.FilteringSelect" store="rolestore" searchAttr="name" name="role" onchange="markEmploymentForUpdate();" id="roleInput_'+ idResult +'" value="'+ jobrole +'" ></td>' + 
        '<td height="29">' + 
         '<input type="text" dojoType="dijit.form.ValidationTextBox" onchange="markEmploymentForUpdate();"' + 
          'id="jtitle_'+ idResult + '"' + 
          'required="true"' + 
          'promptMessage="Please enter your job title"' + 
          'invalidMessage="Please enter your job title"' + 
          'value="'+ jobtitle + '"/>' + 
        '</td>' + 
        '<td height="29"><img src="/images/site/msg/small/msg-remove-small.png" border="0" onmouseover="this.style.cursor=\'pointer\';" onclick="removeEmployer(\'employ_'+ idResult +'\', '+ idResult +')" /></td>' + 
       '</tr>' + 
      '</table>' + 
     '</div>'; 

      dijit.byId('companydetails').hide(); 
      dijit.byId('employername').setValue(''); 
      dijit.byId('jobtitle').setValue(''); 
      dijit.byId('jobrole').setValue(''); 

      dojo.byId('data-table').innerHTML += divStr; 

      dojo.byId('companydetails').hide(); 


     }else{ 

      dojo.byId('add-error').innerHTML = '<div class="error">Unable to process your request. Please try again.</div>'; 

     } 



    }  
}; 

var deferred = dojo.xhrGet(xhrArgs); 

这是显示文本框为dojo.parse未在此运行。如果我将ValidationTextBox替换为:

var textbox = new dijit.form.ValidationTextBox({ 
    id:"cmpy_" + idResult, 
    required:true, 
    trim:true, 
    "change":"markEmploymentForUpdate();", 
    promptMessage:"Please enter a valid company name", 
    value:companyname 
}); 

我只是将对象打印到页面上。

任何想法如何将它添加到我的页面并维护dojo组件,而不是默认为文本框?

非常感谢。

dojo.parser.parse(dojo.byId('data-table'));在你设置它的innerHTML之后

+0

是否可以对整个页面进行操作?如dojo.parser.parse(this)? – 2010-08-04 16:22:17

+0

@GrantCollins:在加载dojo之前,在dojoConfig中设置'parseonload'。 – DanMan 2013-05-29 12:52:38