Програмнное формирование RADIO_GROUP

Добрый день!

Вопрос вроде как элементарный, но вызывающий недоумение.
Как програмнно сформировать елементы для RADIO_GROUP?
Нужно представить выбор из справочника именно через RADIO_GROUP.

Емеется в наличии только JS код выгруженный из конфигурации. Глядя на него пытался сделать нечто подобное:
{
operation: "insert",
name: "RadioGroupContainer",
values: {
itemType: Terrasoft.ViewItemType.RADIO_GROUP,
name: "RadioGroup",
collection: {bindTo: "RadioGroupItemCollection"},
items: []
}

Коллекцию RadioGroupItemCollection формирую в методе init, как набор конфигов. Но ничего не получается.

Нравится

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

Максим, ошибка может заключаться в использовании метода init. Попробуйте использовать onEntityInitialized. Так же за елементы radio_group отвечает свойство items, а не collection.

{
        "operation": "insert",
        "name": "UsrProductionType",
        "values": {
            "itemType": 16,
            "layout": {
                "column": 12,
                "row": 1,
                "colSpan": 12,
                "rowSpan": 1
            },
            "bindTo": "UsrProductionType",
            "items": [],
            "value": {
                "bindTo": "UsrProductionType"
            }
        },
        "parentName": "Header",
        "propertyName": "items",
        "index": 3
    },
    {
        "operation": "insert",
        "name": "FirstUsrProductionType",
        "values": {
            "caption": {
                "bindTo": "Resources.Strings.FirstUsrProductionTypeCaption"
            },
            "value": "Название 1"
        },
        "parentName": "UsrProductionType",
        "propertyName": "items",
        "index": 0
    },
    {
        "operation": "insert",
        "name": "SecondUsrProductionType",
        "values": {
            "caption": {
                "bindTo": "Resources.Strings.SecondUsrProductionTypeCaption"
            },
            "value": "Название 2"
        },
        "parentName": "UsrProductionType",
        "propertyName": "items",
        "index": 1
    }

Спасибо за ответы!

Антон, закодировать через diff схему я могу без проблем так (суть аналогична вашей):
{
operation: "insert",
name: "CallReason",
values: {
itemType: Terrasoft.ViewItemType.RADIO_GROUP,
caption: "Call Reason",
value: {bindTo: "CallReason"},
items: [
{
name: "Test1",
caption: "Test1",
value: "Test1"
}, {
name: "Test2",
caption: "Test2",
value: "Test2"
}, {
name: "Test3",
caption: "Test3",
value: "Test3"
}
]
}
}
Вопрос, как добавить эти items программно, когда их список не предопределен изначально.

Илья, я делал и через items двумя способами так:
1. items: {bintTo: "getItemsConfig"}
2. items: {bintTo: "SomeCollectionAttribute"}

где,
getItemConfig - это какая-то функция, возвращающая конфиг для items,
SomeCollectionAttribute - это атрибут коллекция - набор конфигов для каждого items.

Судя по отладчику генератор radio button не вызывает функцию, и не использует коллекцию, переданные в bindTo. Генератор просто пытается интепретировать имя того что передано в bindTo ("getItemsConfig" или "SomeCollectionAttribute") сразу как конфиг, и соответсвенно падает на этом.

Максим, Вам стоит посмотреть в сторону схемы "ViewGeneratorV2", в котором и происходит генерация радио группы и ее айтемов. Или же попробуйте создать свой Контейнер унаследовавшись от AbstractContainer или Container.

По подсказке хороших людей нашли подходящий пример в конфигурации здесь:
Order.AddressSelectionDetailV2
Сделал по аналогии. Суть такая, что полностью генерируем контрол заново как Container содержаций Containers с помощью GridUtilitesV2.
Способ конечно очень трудозатратный для такой простой задачи, но рабочий)

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