Как опубликовать конфиг в родительский компонент, когда дочерний компонент имеет ViewModel в extjs

У меня есть класс extjs с полем config, и теперь я хочу опубликовать его изменения в родительском контейнере.

Это нормально, когда у меня нет viewModel в дочернем компоненте, но всякий раз, когда я добавляю viewModel в дочерний класс, он ломается! и это из-за публикации. Он публикует свои данные в ближайшую ViewModel!

Как я могу этого добиться? Проверьте скрипку: https://fiddle.sencha.com/#fiddle/hj2 в fiddle, если вы раскомментируете закомментированную строку, вы увидите, что изменение поля не публикуется в заголовке окна.


person Mahmoud Moravej    schedule 03.02.2015    source источник
comment
Поскольку у вас есть родительский контейнер и дочерний элемент в нем, лучше определить модели и создать ссылки один на один. Однако я не знаю на 100%, как это должно выглядеть.   -  person Baidaly    schedule 04.02.2015
comment
Я не понимаю вашу точку зрения по ссылкам один на один. кстати, мой дочерний компонент может иметь модель представления сам по себе, и я не могу переместить его куда-то еще (из-за некоторых формул, которые он использует)   -  person Mahmoud Moravej    schedule 04.02.2015
comment
Как и в упомянутых документах, значение publishs должно быть объявлено как объект для классов.   -  person Mohammadreza    schedule 05.10.2015
comment
Это необходимо для того, чтобы система конфигурации правильно объединила значения из производных классов.   -  person Mohammadreza    schedule 05.10.2015


Ответы (3)


Попробуйте переопределить Bindable отсюда

https://github.com/alexeysolonets/extjs-mvvm-extensions

Это было сделано прямо для цели вашего вопроса.

person Alexey Solonets    schedule 05.04.2017

viewModel По умолчанию: {$value: null, lazy: true}, проблема может заключаться в передаче конфигурации '{}'

viewModel:{$value: null}, //works
person newmount    schedule 05.02.2015
comment
Спасибо, но не во всех случаях помогает. Если я установлю для $value (которое является закрытым полем!) значение null, это приведет к тому, что viewModel будет иметь значение null. - person Mahmoud Moravej; 07.02.2015

К сожалению, я не смог найти идеальный способ. единственное решение, которое я нашел, это: 1- получение дочерней ViewModel 2- вызов функции bind на дочерней виртуальной машине, чтобы получить изменения и поместить значение в нужное место:

vm.bind('{ac}',function(v){w.setTitle(v)});

проверьте эту скрипку: https://fiddle.sencha.com/#fiddle/hrp

person Mahmoud Moravej    schedule 07.02.2015