2010-04-01 3 views
2

У меня есть поле ввода dijit.form.NumberTextBox, который начинается с этих Parms:Изменение ограничений на лету

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

Все работает great..My вопрос, я хотел бы изменить «места» и " шаблоны "на лету. Так что я написал это, чтобы изменить «место» и «Parms обои рисунок»:

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

Итак, после того, как я снова показать форму, я бы ожидать, что поле ввода, чтобы 2 знака после запятой, но форма все еще действует как места = 0 и pattern = '######'. Когда я проверяю значения «места» и «шаблон», я получаю то, что ожидаю (2 и #####. 0). Мой вопрос:

Можете ли вы изменить эти значения на лету ??

ИЛИ

Вы должны уничтожить исходный объект Dijit и заново с новой Parms ??

Thx !!

+0

Дополнительная информация: после изменения противопоказаний, когда я печатаю '1.' в поле ввода появляется недопустимое сообщение после ввода «.». Но, если я набираю «1» и выхожу из поля, никакого сообщения об ошибке и не форматирует его, как я ожидал бы «1.00». Итак, это ошибка? или я чего-то не хватает ??? – GoinOff

+0

Больше странности: ввод «1.0» вкладки создает сообщение об ошибке, когда нужно просто добавить нуль (1.00). Когда я печатаю вкладку «1.1», она форматирует ее правильно (1.10) - нет сообщений об ошибке. Чрезвычайно багги кажется ..... – GoinOff

+0

Сами шаблоны номера Java чрезвычайно сложны и недостаточно четко указаны. Я думаю, что вам нужно иметь фиксированное «0» во всей части, и если вы вручную устанавливаете места, почему бы не использовать «#» в десятичной системе, например «##### 0. ###» Делает это работать лучше? – peller

ответ

1

Итак, вот то, что работает для меня:

Во-первых, я думаю, что это ошибка, потому что поле ввода, которое начинается как

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

, который затем изменен на лету с кодом, как:

Примечание: ntbArry - Массив dijit.form.NumberTextBox Objs привязан к 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#';  
    } 
} 

не проявляет такое же поведение, как поле, создаваемое таким образом (без ограничения модов на лету):

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

Это близко в поведении, но каждый раз, когда вы набираете десятичную точку, ошибка появляется сообщение о недопустимой записи. Это сообщение не появляется при вводе десятичной точки в поле, которое изначально было создано с ограничениями места = 2 и шаблоном «#####. 0 #».

Таким образом, чтобы получить исходное поведение я хотел:

fieldIDEvents является массивом додзе событий, привязанных к полям NumberTextBox. Перед тем как продолжить разъединители додзе события

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

затем уничтожить NumberTextBox додзё объекты

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

Далее, поместите входной тег обратно в HTML, потому что он разрушается:

ПРИМЕЧАНИЕ: tdtag и id в теге html td, который должен содержать тег ввода.

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

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

Теперь создайте объект NumberTextBox снова:

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

Это несколько дополнительных шагов, но, по крайней мере, я знаю, это то, что работает для me..If я что-то не хватает основной, пусть я знаю, легко пропустить мелкие детали с этим материалом.

+0

вы должны отправить отчет на bugs.dojotoolkit.org. – peller

+0

Для этого напишу отчет об ошибке. Я забыл упомянуть, что я использовал 1.3.2 и только вчера обновился до 1.4.2, и я все еще вижу такое же поведение. Кроме того, я модифицировал константы для использования только «pattern:» #####. 00 'без установки свойства «places». Таким образом, ошибка легко создается, начиная с NumberTextBox с шаблоном «#####», а затем меняя шаблон на «#####. 00» на лету (нет «мест»). – GoinOff

0

Я использую Dojo 1.3, и я вижу, что dijit.form.NumberTextBox не имеет pattern и places, но имеет editOptions. Поэтому я хотел бы попытаться изменить ограничения, как это:

myConstObj.editOption.places = 2; 
+0

шаблон и места находятся на объекте ограничений, сам по себе является свойством NumberTextBox. editOptions защищен и предназначен только для форматирования значения, когда он активно редактируется. – peller

Смежные вопросы