extjs 5: сделать привязку данных для пользовательского свойства компонента
У меня есть компонент, который расширен из файлового поля, и я добавил к нему настраиваемое свойство serverPath, а также определил геттер и сеттер.
код:
Ext.define('MyApp.ux.Field.File',{
extend:'Ext.form.field.File',
xtype:'myfilefield',
serverPath:'',
getServerPath:function(){
return this.serverPath;
},
setServerPath:function(serverPath){
this.serverPath = serverPath;
}
});
Ext.create('MyApp.ux.Field.File',{
bind:{
serverPath:'{serverPath}'
},
viewModel:{
type:'myViewModel'
}
});
Я не буду вставлять определение myViewModel. это просто.
и оказалось, что привязка не вступает в силу.
кто-нибудь может помочь?
1 ответ
Решение
Ваш класс должен быть:
Ext.define('MyApp.ux.Field.File',{
extend:'Ext.form.field.File',
xtype:'myfilefield',
config: {
serverPath:''
}
});
И вы должны быть полностью настроены, потому что ExtJS создаст и для вас, и для сеттера. В вашей модели просмотра убедитесь, что у вас есть:
data: {
serverPath : 'yourPathGoesHere'
}
Отредактировано Есть две вещи, которые отсутствовали:
- При изменении значения в ViewModel изменения асинхронно публикуются планировщиком. Если вы хотите, чтобы изменения были отражены немедленно, вам нужно использовать notify в ViewModel или отключить логику после изменения.
- Чтобы получить настраиваемые свойства конфигурации класса, чтобы уведомлять ViewModel об изменениях, вам необходимо добавить их в свойстве config "publishes". Пожалуйста, посмотрите эту обновленную скрипку.