Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Связанный (bind) компонент зависит от валидности формы (https://javascript.ru/forum/extjs/56236-svyazannyjj-bind-komponent-zavisit-ot-validnosti-formy.html)

khusamov 06.06.2015 03:50

Связанный (bind) компонент зависит от валидности формы
 
Для таблиц Ext.grid.Panel можно задать

bind: "{!grid.selection}"


чтобы связанный компонент зависил от того, выделено что-то в таблице или нет.

А что нужно написать, чтобы связанный компонент зависел от того, валидна форма или нет?

Такая запись не работает:

bind: "{!form.valid}"

khusamov 06.06.2015 16:17

Попробовал сделать следующим образом. Добавил в связанный компонент:

bind: {
	disabled: "{!form.isValid}"
}


А в форму добавил для этого случая метод:

getIsValid: function() {
	return this.isValid();
}


Увы, это пока не работает.

khusamov 06.06.2015 16:44

Вот пример в песочнице для разбора
https://fiddle.sencha.com/#fiddle/o66

siber-biber 06.06.2015 19:35

если хочется использовать bind надо класть данные во view model. не вижу где у вас это происходит. вот что у меня получилось на скорую руку:
https://fiddle.sencha.com/#fiddle/o68

кстати этот функционал уже давно реализован, но только для компонентов лежащих на form panel :)
http://docs.sencha.com/extjs/5.1/5.1...t-cfg-formBind

khusamov 06.06.2015 20:40

Спасибо за ответ! про formBind не знал. Сейчас посмотрю, можно ли его использовать в моем случае или нет.

вообще-то в сенче есть способ определить выделена ли строка в гриде или нет

grid.selection

и оно работает без viewModel.data

Вот поэтому я и хотел узнать, как свое сварганить.

khusamov 06.06.2015 21:00

Ваш ответ дал многое:

- во первых узнал о существовании lookupViewModel() - до этого пользовался getViewModel()

- во вторых мне понравилась идея отслеживать валидность не путем проверки влоб, а при помощи события validitychange

- ну и formBind узнал...

Спасибо еще раз!

khusamov 06.06.2015 21:33

к сожалению в этом примере https://fiddle.sencha.com/#fiddle/o68 есть недостаток, при открытии окна сразу подсвечиваются красным невалидные поля.

khusamov 06.06.2015 21:42

Вторая проблема.

Команда this.lookupViewModel() в коде:

initComponent: function() {
		this.callParent(arguments);
		var viewModel = this.lookupViewModel();
		...
}


сбивает ссылку на форму (у меня окно, внутри окна форма с reference=form).

В итоге, просто если вызвать this.lookupViewModel() то ссылка обнуляется. С чем это связано не знаю. В итоге пришлось отказаться от initComponent в пользу контроллера окна (куда и перенес весь этот код).

siber-biber 07.06.2015 07:50

То что подсвечивается это решаемо. Используйте hasInvalidField вместо метода isValid (http://docs.sencha.com/extjs/5.1/5.1...asInvalidField). Я обновил свой фидл.

Да контроллер нужен по любому. Туда этот код вынести пожалуй идеологически правильно.

khusamov 07.06.2015 11:59

Цитата:

Да контроллер нужен по любому. Туда этот код вынести пожалуй идеологически правильно.
непонятно почему ссылка сбрасывается


Часовой пояс GMT +3, время: 23:39.