javascript
Технические вопросы
5.x

Не получается вывести CheckBox на странице.

Не получается вывести checkbox на странице. Для его вывода написал следующий код.
В секции attributes:

"IsStreetInFIAS": {
        name: "IsStreetInFIAS",
        dataValueType: Terrasoft.DataValueType.BOOLEAN,
        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        value: false
}

В секции diff:

{
        "operation": "insert",
        "parentName": "Header",
        "propertyName": "items",
        "name": "IsStreetInFIAS",
        "values": {
                "bindTo": "IsStreetInFIAS",
                "caption": {
                        bindTo: "Resources.Strings.IsStreetInFIAS_checkbox_Caption"
                },
                "layout": {"column": 1, "row": 5, "colSpan": 1},
                "controlConfig": {
                        "className": "Terrasoft.CheckBoxEdit",
                        "checkedchanged": {
                                "bindTo": "OnIsStreetInFIASChanged"
                        }
                "checked": false
        }
}

При запуске процесса вывода страницы, содержащей CheckBoxEdit, в окне консоли отладчика браузера выводится следующее сообщение об ошибке: "Свойство checked Не было определено в классе Terrasoft.controls.Label". Как мне поправить исходник, чтобы чекбокс выводился?

Нравится

7 комментариев

Евгений добрый день!!!

привожу пример как создать к примеру "Напоминания ответственному", как изображено на картинке ниже:

[javascript]
....
attributes: {
/**
* Напомнить ответственнному
*/
"UpoRemindToOwner": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
dependencies: [
{
columns: ["UpoRemindToOwner"],
methodName: "onRemindToOwnerChanged"
}
]
}
},
....
methods: {
/**
* Обработчик события изменения поля Напомнить ответсвенному
* @protected
*/
onRemindToOwnerChanged: function() {
var remindToOwner = this.get("UpoRemindToOwner");
if (remindToOwner) {
var startDate = this.Terrasoft.deepClone(this.get("UpoStartDate"));
if (!Ext.isDate(startDate)) {
return;
}
startDate = this.Terrasoft.clearSeconds(startDate);
this.set("UpoRemindToOwnerDate", startDate);
this.set("UpoRemindToOwnerDateEnabled", true);
} else {
this.set("UpoRemindToOwnerDate", null);
this.set("UpoRemindToOwnerDateEnabled", false);
}
}
},
....
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"parentName": "GeneralInfoLeft_Remind",
"propertyName": "items",
"name": "UpoRemindToOwner",
"values": {
"bindTo": "UpoRemindToOwner",
"layout": { "column": 0, "row": 1, "colSpan": 12 },
"labelConfig": {
"caption": { "bindTo": "Resources.Strings.RemindToOwnerCaption" }
}
}
},
{
"operation": "insert",
"parentName": "GeneralInfoLeft_Remind",
"propertyName": "items",
"name": "UpoRemindToOwnerDate",
"values": {
"bindTo": "UpoRemindToOwnerDate",
"layout": { "column": 12, "row": 1, "colSpan": 12 },
"enabled": { "bindTo": "UpoRemindToOwnerDateEnabled" },
"labelConfig": {
"caption": { "bindTo": "Resources.Strings.RemindDateCaption" }
}
}
},
]/**SCHEMA_DIFF*/,
[/javascript]

если разделить на этапы:
1. В Аттрибутах создаем и описываем атрибут "UpoRemindToOwner" - это и есть CheckBox поле, система при генерации страницы и выводе на экран по типу поля сама определяет, что это CheckBox поле и выводит его на экран.
2. в Методах создаем метод "onRemindToOwnerChanged", который контролирует изменения реквизита на экране
3. Выводим на экран.

Выше привел пример кода.

Михаил, извините, а что это за контейнер GeneralInfoLeft_Remind? Какой-то контейнер, созданный самим разработчиком (в данном случае вами)?
У меня чекбокс так и не выводится ни с
[javascript]
"parentName": "GeneralInfoLeft_Remind"

[/javascript]ни с
[javascript]
"parentName": "Header"

[/javascript]Хотя ошибок ни при публикации модуля страницы, ни при запуске процесса, открывающего эту страницу, не выдаётся ни в первом, ни во втором случае.

Чекбокс появился. Я закомментировал
[javascript]
columns: ["UpoRemindToOwner"]

[/javascript]и он стал визуализироваться.

Большое спасибо за помощь, Михаил.

Евгений мой пример полностью копипастить не нужно, это пример.

[javascript]
"parentName": "GeneralInfoLeft_Remind"
[/javascript]

да это мой GRID_LAYOUT. в вашем случае это может быть совсем иной GRID_LAYOUT, но не забываем следующее:
1. Прежде чем вывести информацию на экран требуется схематично, на листе пумаге, в графическом редакторе разрисовать схематично Контейнеры, Назначить им имя Классов (если потребуется верстка, то по имени класса контейнера, мы обращаемся к нему), и далее пишем код. Не забываем, что в BPMOnline используется технология Bootstrap для визуализации и отображении информации на экране.
2. Прошу отдельно изучить и ознакомиться как строятся и формируются страницы Bootstrap. Я это все вам Евгений рекомендую, чтобы вы в будущем, прежде чем писать код для начало рисовали схематично свою страницу. Понимали в каких контейнерах где что будет располагаться, понимали какие стили верстки требуется применить дополнительно, чтобы визуально было все эстетично и красиво.
3. На схематично созданной страницы, описали бы для начала какие поля будут изменяемыми, какие поля будут зависимыми. Какие события будут получены экранной формой, какие события будут переданы и какому адресату.
4. И только после этого приступать к программированию.

как я вам и говорил ранее Евгений. Чтобы мы с вами говорили на одном языке, прошу вас записаться на сайте Академия Террасофт на обучение по программированию на платформе.

По вашему сообщению. Для анализа и воспроизводства ошибки у себя на экране, прошу пожалуйста , во вложении, выслать следующим постом Листинг вашей схемы страницы редактирования. Спасибо!!!

Спасибо за помощь и поддержку, Михаил. Checkbox воспроизвёлся - отобразился на экране. Ошибок, при этом, не было. У меня сейчас такая ситуация, что приходится работать - рисовать страницы на Jscript и вместе с этим изучать этот язык, т.к. я с ним раньше никогда не сталкивался. Ещё раз благодарю за помощь.

Добрый день Евгений!!!

рекомендую в первую очередь прочесть информацию опубликованную на Академии террасофт. Вот ссылка на SDK по платформе SDK BPMOnline 7.6

Показать все комментарии