Связанный (bind) компонент зависит от валидности формы
Для таблиц Ext.grid.Panel можно задать
bind: "{!grid.selection}" чтобы связанный компонент зависил от того, выделено что-то в таблице или нет. А что нужно написать, чтобы связанный компонент зависел от того, валидна форма или нет? Такая запись не работает: bind: "{!form.valid}" |
Попробовал сделать следующим образом. Добавил в связанный компонент:
bind: { disabled: "{!form.isValid}" } А в форму добавил для этого случая метод: getIsValid: function() { return this.isValid(); } Увы, это пока не работает. |
Вот пример в песочнице для разбора
https://fiddle.sencha.com/#fiddle/o66 |
если хочется использовать bind надо класть данные во view model. не вижу где у вас это происходит. вот что у меня получилось на скорую руку:
https://fiddle.sencha.com/#fiddle/o68 кстати этот функционал уже давно реализован, но только для компонентов лежащих на form panel :) http://docs.sencha.com/extjs/5.1/5.1...t-cfg-formBind |
Спасибо за ответ! про formBind не знал. Сейчас посмотрю, можно ли его использовать в моем случае или нет.
вообще-то в сенче есть способ определить выделена ли строка в гриде или нет grid.selection и оно работает без viewModel.data Вот поэтому я и хотел узнать, как свое сварганить. |
Ваш ответ дал многое:
- во первых узнал о существовании lookupViewModel() - до этого пользовался getViewModel() - во вторых мне понравилась идея отслеживать валидность не путем проверки влоб, а при помощи события validitychange - ну и formBind узнал... Спасибо еще раз! |
к сожалению в этом примере https://fiddle.sencha.com/#fiddle/o68 есть недостаток, при открытии окна сразу подсвечиваются красным невалидные поля.
|
Вторая проблема.
Команда this.lookupViewModel() в коде: initComponent: function() { this.callParent(arguments); var viewModel = this.lookupViewModel(); ... } сбивает ссылку на форму (у меня окно, внутри окна форма с reference=form). В итоге, просто если вызвать this.lookupViewModel() то ссылка обнуляется. С чем это связано не знаю. В итоге пришлось отказаться от initComponent в пользу контроллера окна (куда и перенес весь этот код). |
То что подсвечивается это решаемо. Используйте hasInvalidField вместо метода isValid (http://docs.sencha.com/extjs/5.1/5.1...asInvalidField). Я обновил свой фидл.
Да контроллер нужен по любому. Туда этот код вынести пожалуй идеологически правильно. |
Цитата:
|
Часовой пояс GMT +3, время: 23:39. |