Не работает 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". Несколько фрагментов кода из базовой конфигурации:
[javascript]
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});
[/javascript]
Перенес из секции values в columns, но ничего не поменялось...
[javascript]
columns: {
ownerNames: {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
name: 'ownerNames'
}
},
values: {
ownerIds: '',
//ownerNames: '',
gridData: new Terrasoft.BaseViewModelCollection()
},
[/javascript]
Если до binding-а присваивать - то отображается.
[javascript]
viewModel.set('ownerNames', 'aaaaaaaaaaa');
view.bind(viewModel);
view.render(renderTo);
[/javascript]
Если в обработчике после вызова справочника - то не отображается... По крайней мере для TextEdit.
Что еще можно проверить?
Если что, могу удаленно показать...
Валерий, было бы удобней, если бы Вы предоставили полный код модуля, чтобы локально посмотреть.
Действительно...:smile:
Прицепил к сообщению.
Версия 7.1.0.172
Здравтсвуйте, Валерий!
Нашел решение. Вот фрагменты кода:
[javascript]
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; //так надо
};
[/javascript]