2017-01-10 4 views
0

У нас есть требование, когда мы должны сделать все входные элементы формы как readonly, когда пользовательский доступ задан как «ПРОЧИТАТЬ ТОЛЬКО».Создание всего пользовательского интерфейса как Readonly/Disable?

В нашей кодировке мы используем подход, основанный на основе виджета, где виджеты указаны в шаблоне HTML и используются в соответствующем JS-файле.

Я попытался с помощью следующего кода в моем JS postcreate метод:

var item=dojo.query("#showtech_log_title_pane"); // id of the content pane 

for (var i=0;i{ 
    dijit.byId(item[i]).set('readOnly',true); 
} 

Error : dijit by id-> undefined or null

также,

var container = dojo.query("#showtech_log_title_pane"); 

dojo.query('input', container).forEach(
    function(inputElem){ 
    inputElem.disabled = 'disabled'; 
    } 
) 

Error: Create Element not a method

+0

Ваш код содержит ошибки синтаксиса. Исправить это было бы хорошим началом. ;-) Атрибут * disabled * является логическим, поэтому 'inputElem.disabled = true', но строка также работает, так как она оценивает значение true (но не при установке на« false », вам нужно« false »). – RobG

+0

В первой строке второго блока кода есть ошибка, вы используете две одинарные кавычки и завершаете двойную кавычку. И цикл for в первом блоке. – philantrovert

+0

@RobG, делая это, я получаю следующую ошибку: При анализе и отображении содержимого произошла ошибка. (Невозможно разрешить конструктор для: 'xwt.widget.LicenseInfoDialogue'). Я поместил код в функцию postCreate и addonLoad –

ответ

1

Чтобы отключить виджет, Вы должны получить ссылку на он, и установите свой отключенный атрибут true.

В вашем случае, вы должны перебрать все входы, которые имеют идентификаторы (чтобы быть уверенными, что это созданный виджет), а затем получить охватывающий виджет ввода и установить его на инвалид

Ниже рабочий пример:

require([ "dojo/ready", 
 
\t \t "dojo/query", 
 
      "dijit/registry", 
 
      "dojo/_base/array", 
 
\t \t "dijit/TitlePane", 
 
\t \t "dojo/domReady!"], 
 
function (ready, query, registry, array, TitlePane) { 
 
\t ready(function(){ 
 
     //get all 
 
     var inputs = dojo.query('input', "enclosing_input_div"); 
 
     array.forEach(inputs,function(input){ 
 
     //check if a it's a created widget input (all widgets have theire own id) 
 
     \t if(input.id) 
 
      if(registry.byId(input.id)) // recheck if it it has enclosing widget 
 
      registry.byId(input.id).set("disabled",true) 
 
     }) 
 
    }); 
 
});
<link href="https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dijit/themes/claro/claro.css" rel="stylesheet"/> 
 
<script> 
 
    dojoConfig= { 
 
     parseOnLoad: true, 
 
     async: true 
 
    }; 
 
</script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> 
 

 
<body class="claro"> 
 
    <div id="enclosing_input_div"> 
 
    <div id="tp1" data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'tp1'"> 
 
     <table> 
 
     <tr> 
 
      <td>TextField :</td> 
 
      <td><input data-dojo-type="dijit/form/TextBox"></td> 
 
     </tr> 
 
     <tr> 
 
      <td>NumberTextBox :</td> 
 
      <td><input id="numberTextBox" data-dojo-type="dijit/form/NumberTextBox"></td> 
 
     </tr> 
 
     <tr> 
 
      <td>Checkbox :</td> 
 
      <td><input id="checkBox" data-dojo-type="dijit/form/CheckBox"></td> 
 
     </tr> 
 
     <tr> 
 
      <td>RadioButton :</td> 
 
      <td><input id="radioButton" data-dojo-type="dijit/form/RadioButton"></td> 
 
     </tr> 
 
     </table> 
 
    </div> 
 
    </div> 
 
</body>

Here is also a fiddle

+0

Сделав это, я получаю следующую ошибку: при анализе и рендеринге содержимого произошла ошибка. (Невозможно разрешить конструктор для: 'xwt.widget.LicenseInfoDialogue'). Я поместил код в функцию postCreate и даже вне функции postcreate –

+0

Итак, разместите весь организованный код, чтобы мы могли видеть, где вы будете вносить изменения. –

+0

Ниже приведена часть моей программы. Не могли бы вы проверить и сообщить мне, где добавить свою функциональность. –

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