Не работает bindTo свойства value для компонента Terrasoft.TextEdit
Почему может не работать binding? Кто-нибудь сталкивался с таким?
Сделал тестовый модуль, в нем:
1. В модели определил свойства и обработчик кнопки выбора ответственных:
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. В представлении определил кнопку и текстовое поле:
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 для кнопки работает, а для текстового поля - нет. В том смысле что код отрабатывает нормально, но текстовое поле не отображает изменение значения модели.
Нравится
Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу
Здравствуйте, Валерий!
Биндинг должен работать по колонкам. То есть в модели представления должны быть колонка "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; //так надо };