Вопрос

Не сохраняются данные в виртуальную колонку

Я новичок в этом деле, но стало уже лучше. Пытаюсь добавить комплексный фильтр на основе полученных данных. если, что-то есть то на основе этого делать выборку. 

esq1.getEntityCollection(function (result) {

                                            if (!result.success) {

                                                this.showInformationDialog("Ошибка запроса данных");

                                                return;

                                            }

                                            result.collection.each(function (item) {

                                                    //message += "Все записи в списке " + item.get("IdRecord");

                                                    //message += " \n";

                                                if (item.get("IdRecord") === id) {

                                                    message += "Категория в записи " + item.get("CategoryRecord");

                                                    message += " \n";

                                                    message += "Тип в записи " + item.get("TypeRecord");

                                                    message += " \n";

                                                    categoryId = item.get("CategoryRecord");

                                                    typeId = item.get("TypeRecord");

                                                    this.set("Category", item.get("CategoryRecord"));

                                                    this.set("Type", item.get("TypeRecord"));

                                            }

                                            });

                                            this.showInformationDialog(message);

                                            /**/

                                        }, this);

есть вот такой код, где выводит месейдж бокс с айдишниками найденых мной обьектов. Я их записываю вот сюда

"Category": {

                "dataValueType": Terrasoft.DataValueType.GUID,

                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

                "value": "00000000-0000-0000-0000-000000000000"

                //"value": "Deffault Value"

            },

            "Type": {

                "dataValueType": Terrasoft.DataValueType.GUID,

                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

                "value": "00000000-0000-0000-0000-000000000000"

                //"value": "Deffault Value"

            },

прочитал про виртуальные колонки, или записываю в локальные переменные. результат один. при попытке вывести их в консоль или задействовать в работе в них дефаулт значение = нули или если законметить валуе то андефаинд а в локальных переменных просто дефолтные значения.

не понмаю, куда данные деваются? почему в месейдж бокс попадает инфа но вынести ее из коллекции или сохранить уже не получается. что всю логику там надо делать? но если данные нужны из другого места. не понимаю извините

Нравится

1 комментарий

Александр, проблема в том, что esq выполняется асинхронно, то есть у Вас сначала выполнится логика, которая вычитывает значение аттрибута и вызыращает пустой Guid, а только после этого завершит выполнение кусок:

 

this.set("Category", item.get("CategoryRecord"));

                                                    this.set("Type", item.get("TypeRecord"));

                                            }

                                            });

                                            this.showInformationDialog(message);

 

и Вы увидите результат (можете в отладчике протестировать, привязать проставление значения аттрибута через esq, а потом отображение аттрибута, на нажатие какой-то кнопки и проставить breakpoint-ы в двух местах: на моменте this.set("Type", item.get("TypeRecord")); и на моменте, когда должно вернуться значение аттрибута вне esq).

 

Если нужно использовать только esq то нужно разделить логику: например проставление значения аттрибута (esq) завязать на onEntityInitialized, а использование полученного значения либо на нажатие на какую-то кнопку (закинуть логику в метод-обработчик клика), либо на изменение значения какой-то колонки. Так значение аттрибута получить можно будет.

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