2010-08-02 5 views
0

J'ai un problème avec un autre formulaire activé par dojo sur lequel je travaille. Un utilisateur peut entrer des détails sur la page en entrant les données à l'aide d'une boîte de dialogue, qui à son tour met à jour la base de données et affiche ensuite les données d'utilisateur entrées dans le formulaire.Ajout dynamique de dijit sur le bouton cliquez par programme ... comment?

Chaque élément ajouté consiste en 2 x zones de texte de validation 1 x FilteringSelect. Quand il est ajouté à la page, ils sont ajoutés en tant que simples zones de texte.

J'ai essayé d'ajouter simplement des chaînes standard, mais cela signifie que dojo.parse() ne fonctionne pas sur le code. J'ai également essayé d'ajouter par programmation les éléments mais cela affiche simplement l'objet élément sous forme de chaîne à la page. Jusqu'à présent j'ai:

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); 

Ceci affiche des zones de texte que le dojo.parse ne fonctionne pas sur cela. Si je remplace le ValidationTextBox avec:

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

Je viens d'obtenir l'objet imprimé sur la page.

Des idées comment je peux ajouter ceci à ma page et maintenir le composant dojo plutôt que par défaut à une zone de texte?

Merci beaucoup.

Répondre

0

dojo.parser.parse(dojo.byId('data-table')); après avoir défini c'est innerHTML

+0

est-il possible de le faire à la page entière? comme dojo.parser.parse (this) ?? –

+0

@GrantCollins: Définissez 'parseonload' dans dojoConfig avant de charger le dojo lui-même. – DanMan

Questions connexes