Не работает bindTo свойства value для компонента Terrasoft.TextEdit

Почему может не работать binding? Кто-нибудь сталкивался с таким?
Сделал тестовый модуль, в нем:
1. В модели определил свойства и обработчик кнопки выбора ответственных:

                values: {
                        ownerIds: '',
                        ownerNames: ''
                },
                methods: {
                        onChooseOwnerBtnClick: function() {
                                var config = {
                                        entitySchemaName: 'Contact',
                                        multiSelect: true,
                                        columnName: 'Name',
                                        filters: BaseFiltersGenerateModule.OwnerFilter()
                                };
                                var handler = function(args) {
                                        var items = args.selectedRows.getItems() || [];
                                        var s1 = "";
                                        var s2 = "";
                                        for (var i = 0; i items.length; i++) {
                                                if (s1 !== "") {
                                                        s1 = s1 + ",";
                                                        s2 = s2 + "; ";
                                                }
                                                s1 = s1 + "'" + items[i].value + "'";
                                                s2 = s2 + items[i].displayValue;
                                        }
                                        this.set('ownerIds', s1);
                                        this.set('ownerNames', s2);
                                };
                                var keepAlive = true;
                                LookupUtilities.Open(sandbox, config, handler, this, Ext.get('centerPanel'), keepAlive);
                        }
                }

2. В представлении определил кнопку и текстовое поле:

                items: [{
                        className: 'Terrasoft.Container',
                        id: 'byPeriodSettingsControlContainer4',
                        selectors: {
                                wrapEl: '#byPeriodSettingsControlContainer4'
                        },
                        classes: {
                                wrapClassName: ['custom-inline']
                        },
                        items: [{
                                className: 'Terrasoft.Label',
                                caption: 'Owner'
                        }, {
                                className: 'Terrasoft.TextEdit',
                                readonly: true,
                                value: {
                                        bindTo: 'ownerNames'
                                }
                        }, {
                                className: 'Terrasoft.Button',
                                id: 'btnSelectOwner',
                                caption: 'Select',
                                width: '80px',
                                style: Terrasoft.controls.ButtonEnums.style.DEFAULT,
                                click: {
                                        bindTo: 'onChooseOwnerBtnClick'
                                }
                        }]

Все работает без ошибок, под отладчиком срабатывает обработчик и присваивает свойствам модели значения, но на экране в текстовом поле пусто.

Причем пробовал и со схемой OpenCustomModule.md из недавнего цикла уроков - там тоже bindTo для кнопки работает, а для текстового поля - нет. В том смысле что код отрабатывает нормально, но текстовое поле не отображает изменение значения модели.

Нравится

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

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу

Здравствуйте, Валерий!
Биндинг должен работать по колонкам. То есть в модели представления должны быть колонка "ownerNames". Несколько фрагментов кода из базовой конфигурации:

var getViewModel = function() {
return Ext.create('Terrasoft.BaseViewModel', {
columns: {
	languageList: {
		type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		name: 'languageList',
		isCollection: true
	},
	culture: {
		type: Terrasoft.ViewModelColumnType.ATTRIBUTE,
		name: 'culture',
		isRequired: true
	}
},
......
 
{
				className: 'Terrasoft.ComboBoxEdit',
				value: {
					bindTo: 'culture'
				},
				list: {
					bindTo: 'languageList'
				},
				prepareList: {
					bindTo: 'onPrepareLanguageList'
				},
				visible: {
					bindTo: 'visibleByBuildType'
				}
			},
.........
var sysCutureId = entity.get('SysCulture.Id');
	var sysCutureName = entity.get('SysCulture.Name');
	var timeZoneCode = entity.get('TimeZoneId');
	var timeZoneId = entity.get(timeZoneIdColumn.columnPath);
	var timeZoneName = entity.get(timeZoneNameColumn.columnPath);
	viewModel.set('culture', {value: sysCutureId, displayValue: sysCutureName});

Перенес из секции values в columns, но ничего не поменялось...

		columns: {
			ownerNames: {
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				name: 'ownerNames'
			}
		},
		values: {
			ownerIds: '',
			//ownerNames: '',
			gridData: new Terrasoft.BaseViewModelCollection()
		},

Если до binding-а присваивать - то отображается.

	viewModel.set('ownerNames', 'aaaaaaaaaaa');
	view.bind(viewModel);
	view.render(renderTo);

Если в обработчике после вызова справочника - то не отображается... По крайней мере для TextEdit.

Что еще можно проверить?
Если что, могу удаленно показать...

Валерий, было бы удобней, если бы Вы предоставили полный код модуля, чтобы локально посмотреть.

Действительно...:smile:
Прицепил к сообщению.
Версия 7.1.0.172

Здравтсвуйте, Валерий!
Нашел решение. Вот фрагменты кода:

function(Ext, Terrasoft, sandbox, resources, BaseFiltersGenerateModule, LookupUtilities) {
		var view, viewModel, ownerNamesValue;
//===============================
values: {
			ownerIds: '',
			ownerNames: ownerNamesValue,
			gridData: new Terrasoft.BaseViewModelCollection()
				},
//==============================
var handler = function(args) {
			var items = args.selectedRows.getItems() || [];
			var s1 = "";
			var s2 = "";
//==============================
 //     так не надо                  viewModel.set('ownerNames', s2);
                        ownerNamesValue = s2; //так надо
						};

Спасибо, Андрей, работает!

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