2010-04-01 6 views
2

J'ai un champ d'entrée de dijit.form.NumberTextBox qui commence avec ces parms:évolution des contraintes à la volée

new dijit.form.NumberTextBox({ 
    id: din1, 
    style: "width:60px", 
    constraints: { 
     places: 0, 
     pattern: '######' 
     } 
    }, 
    din1); 

Tout fonctionne question great..My est que je voudrais changer les « lieux » et « motif 'à la volée. J'ai donc écrit ceci pour changer « lieux » et les parms 'Patterns:

var myFldObj = dijit.byId(din1); 
if (myFldObj) { 
    var myConstObj = myFldObj.attr('constraints'); 
    if (myConstObj) { 
    myConstObj.places = 2; 
    myConstObj.pattern = '#####.0'; 
    } 
} 

Ainsi, après que je montre à nouveau le formulaire, j'attendre le champ de saisie pour permettre 2 décimales mais la forme agit encore comme lieux = 0 et pattern = '######'. Quand je vérifie les valeurs de 'places' et de 'pattern', j'obtiens ce à quoi je m'attendais (2 et #####. 0). Ma question:

Pouvez-vous modifier ces valeurs à la volée ??

OU

Avez-vous de détruire l'objet dijit d'origine et de recréer avec de nouveaux parms ??

Thx !!

+0

Informations supplémentaires: après avoir modifié les contraintes, lorsque je tape un '1' le champ de saisie un message invalide apparaît après que je tape '.'. Mais, si je tape '1' et tabulation hors du champ, aucun message d'erreur et le formate comme je m'attendais à '1.00'. Alors, est-ce un bug ??? ou est-ce que je manque quelque chose ??? – GoinOff

+0

Plus bizarre: en tapant '1.0' l'onglet crée le message d'erreur quand il devrait juste ajouter un zéro (1.00). Quand je tape l'onglet '1.1', il le formate correctement (1.10) - Pas de message d'erreur. Extrêmement buggy est semble ..... – GoinOff

+0

Les modèles de numéros Java eux-mêmes sont extrêmement compliqués et pas bien spécifié. Je pense que vous devez avoir un "0" fixe dans la partie entière, et si vous définissez des emplacements manuellement, pourquoi ne pas utiliser "#" dans la décimale, comme "##### 0. ###" Est-ce que mieux travailler? – peller

Répondre

1

Alors, voici ce qui a fonctionné pour moi:

D'abord, je pense que c'est un bug car un champ d'entrée qui commence comme

new dijit.form.NumberTextBox({ 
    id: "fieldID", 
    style: "width:60px", 
    constraints: { 
     places: 0 
     } 
    }, 
    "fieldID"); 

qui est ensuite changé à la volée avec le code comme:

REMARQUE: ntbArry - tableau de dijit.form.NumberTextBox oBJS liée à un identifiant de balise d'entrée html .

for (var x=0;x < ntbArry.length;x++) { 
    var handle = ntbArry[x]; 
    if (handle) { 
    handle.attr('constraints').places = 2; 
    handle.attr('constraints').pattern = '#####.0#';  
    } 
} 

ne présente pas le même comportement qu'un champ créé de cette façon (aucune contrainte mods à la volée):

new dijit.form.NumberTextBox({ 
    id: "fieldID", 
    style: "width: 60px", 
    constraints: { 
    places: 2, 
    pattern: '#####.0#' 
    } 
}, 
"fieldID"); 

Il est proche du comportement, mais chaque fois que vous tapez une virgule décimale, l'erreur un message apparaît indiquant une entrée invalide. Ce message ne s'affiche pas lorsque vous tapez le point décimal sur un champ créé à l'origine avec les contraintes places = 2 et le modèle '#####. 0 #'.

Ainsi, pour obtenir un comportement original que je voulais:

fieldIDEvents est un tableau d'événements liés aux champs dojos NumberTextBox. Avant de poursuivre les événements dojos de déconnexion

for (var x=0;x < fieldIDEvents.length;x++) { 
    var handle = fieldIDEvents[x]; 
    if (handle) {  
    dojo.disconnect(handle); 
    } 
} 

puis détruire les objets dojo NumberTextBox

for (var x=0;x < ntbArry.length;x++) { 
    var handle = ntbArry[x]; 
    if (handle) { 
    handle.destroy(); 
    ntbArry[x] = null; 
    } 
} 

Ensuite, placez la balise d'entrée de nouveau dans le code html car il est détruit:

REMARQUE: tdtag et un id sur un tag td html qui doit contenir l'étiquette d'entrée.

var fld1 = this.document.getElementById("tdtag"); 

if (fld1) { 
    //alert("\""+fld1.innerHTML+"\""); 
    fld1.innerHTML = "<input id=\"fieldID\">"; 
} 

Maintenant, créez l'objet NumberTextBox nouveau:

ntbArry[0] = new dijit.form.NumberTextBox({ 
    id: "fieldID", 
    style: "width: 60px", 
    constraints: { 
    places: 2, 
    pattern: '#####.0#' 
    } 
}, 
"fieldID"); 

Il est à quelques pas supplémentaires, mais au moins je sais que c'est ce qui fonctionne pour me..If je manque quelque chose de base, laissez Je sais, il est facile de manquer les petits détails avec ce genre de choses.

+0

vous devriez déposer un rapport à bugs.dojotoolkit.org. – peller

+0

Je vais déposer un rapport de bug pour cela. J'ai oublié de mentionner que j'utilisais 1.3.2 et que je venais de passer à la version 1.4.2 hier et que je vois toujours le même comportement. De plus, j'ai modifié les constantes pour utiliser uniquement 'pattern:' #####. 00 'sans définir la propriété' places '. Donc, le bug est facilement créé en commençant par un NumberTextBox avec le motif '#####' puis en changeant le motif en '#####. 00' à la volée (pas de "places" nécessaires). – GoinOff

0

J'utilise Dojo 1.3 et je peux voir que dijit.form.NumberTextBox n'a pas de propriétés pattern et places, mais a la propriété editOptions. Je voudrais donc essayer de changer les contraintes comme ceci:

myConstObj.editOption.places = 2; 
+0

motif et les lieux se trouvent sur l'objet contraintes, lui-même une propriété de NumberTextBox. editOptions est protégé et est seulement pour le formatage de la valeur pendant qu'il est activement en cours d'édition – peller

Questions connexes