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'
}

Отредактировано Есть две вещи, которые отсутствовали:

  1. При изменении значения в ViewModel изменения асинхронно публикуются планировщиком. Если вы хотите, чтобы изменения были отражены немедленно, вам нужно использовать notify в ViewModel или отключить логику после изменения.
  2. Чтобы получить настраиваемые свойства конфигурации класса, чтобы уведомлять ViewModel об изменениях, вам необходимо добавить их в свойстве config "publishes". Пожалуйста, посмотрите эту обновленную скрипку.
Другие вопросы по тегам