Enabled множества полей карточки и bindTo на единственный метод

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

{
  "operation": "insert",
  "name": "UsrNumberField",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 0,
      "row": 0,
      "layoutName": "Header"
    },
    "bindTo": "UsrNumber",
    "labelConfig": {},
    "enabled": {"bindTo": "getEnablePropertyOfFields"}
  },
  "parentName": "Header",
  "propertyName": "items",
  "index": 0
},

methods: {
  getEnablePropertyOfFields: function(arg) {
    console.log(arg);
  },
}

При рендере страницы метод вызывается 4 раза подряд. Вывод такой:

UsrNumber
UsrNumber
undefined
undefined

И это только для одного поля. Такой расклад не устраивает. Почему 4 раза? Куда пропадает аргумент? Хочется всё же написать один метод для всех полей объекта, который по определенным условиям выставляет доступность поля. Соответственно не получая в аргументе названия поля ничего не получится.

Версия 7.8.2. Есть идеи? Писать на каждое поле свой метод - несколько безумно на мой взгляд.
Если вдруг есть инфа, что на 7.9.х это починили или такое не замечено, то тоже дайте знать.

Нравится

7 комментариев

Биндитесь на атрибут, и им уже управляйте в событийной модели.

Биндинг на метод - идея плохая, 4-ре раза это Вам повезло, когда я задавался этим вопросом он вызывался 12-ть раз.
http://www.community.terrasoft.ru/forum/topic/25151
http://www.community.terrasoft.ru/forum/topic/25084

"Севостьянов Илья Сергеевич" написал:

Биндитесь на атрибут, и им уже управляйте в событийной модели.

Биндинг на метод - идея плохая, 4-ре раза это Вам повезло, когда я задавался этим вопросом он вызывался 12-ть раз.

http://www.community.terrasoft.ru/forum/topic/25151

http://www.community.terrasoft.ru/forum/topic/25084

Уже прочел Ваши темы. Заводить овер 60 атрибутов грустно. В методе планировалось сделать свич по имени колонки и для каждой свою логику делать. А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

"Темченко Кирилл Александрович" написал:А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

теги пробовали? (в values поля "tag": "testElement", в функции вставить дебаггер и посмотреть что в arguments приходит)

"Варфоломеев Данила" написал:

теги пробовали? (в values поля "tag": "testElement", в функции вставить дебаггер и посмотреть что в arguments приходит)

занятно.
теперь:

UsrNumber
UsrNumber
testElement
testElement

Этому поведению можно доверять теперь? Привязывать логику на тэги?

"Темченко Кирилл Александрович" написал:Привязывать логику на тэги?

Обычно в конфигурации клики через теги отлавливаются. Если и тут работает, то почему бы и нет)

"Темченко Кирилл Александрович" написал:Уже прочел Ваши темы. Заводить овер 60 атрибутов грустно. В методе планировалось сделать свич по имени колонки и для каждой свою логику делать. А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

Опишите подробнее Ваш кейс, скорее всего мы найдем для Вас оптимальное решение :)
Уже всяко понапридумывали "обходных путей".
Например, это не очевидно и нигде не освещается на Академии, но методом опытного "тыка", определено, что многие кейсы можно реализовать не биндингом а через dependesies, а самое занятное что

arguments: {
...
"SomeColumn": {
	"dependencies": [
		{
			"columns": ["SomeColumn"],
			"methodName": "SomeColumnChangeHandler"
			"argument": "Что угодно"
		}
	]
},
...

существует "волшебный" argument через который можно передавать в метод-обработчик произвольную информацию, она попадет в функцию первым аргументом, вторым пойдет имя колонки зависимость которой сработала.
Так что завернув ваш кейс в обработку изменения - можете получить необходимый свитч, я думаю.

Илья. Спасибо. Положу в копилку. Задачу уже решил. С помощью единственного метода и передачи в него тега.

Показать все комментарии