Добрый день, по клику на шапку колонки вызывается функция onClick в label.js, затем идёт проверка подписан ли объект на данный эвент через this.fireEvent("click", this). В Label.hasListener подписки на "click" нету и ничего не происходит. Пожалуйста подскажите, как забиндить метод на click и как передать нужные аргументы в этот метод.

 

Нашёл место где создаются лейблы, но как я понял, через конфиг можно передать только свойства объекта.

/**
 * Rerenders grid header.
 * @protected
 */
reRenderGridHeader: function() {
	var captionContainer = this.Ext.getCmp("gridCaptionContainer");
	var columnsConfigs = this.getGridHeaderConfigs();
	captionContainer.items.clear();
	this.Terrasoft.each(columnsConfigs, function(columnConfig) {
		var label = this.Ext.create("Terrasoft.Label", columnConfig);
		captionContainer.items.add(columnConfig.id, label);
	}, this);
	captionContainer.reRender();
},
 
/**
 * Returns config on caption column.
 * @override
 * @param {Object} columnInfo
 * @param {String} columnInfo.name Column name.
 * @param {Number} columnInfo.colSpan Column size.
 * @param {String} columnInfo.caption Column caption.
 * @return {Object} Column control config.
 */
getCaptionControlConfig: function(columnInfo) {
	var className = "Label";
	var id = ["caption", this._formatColumnName(columnInfo.name), className.toLowerCase()].join("-");
	var config = {
		className: "Terrasoft." + className,
		id: id,
		selectors: {wrapEl: "#" + id},
		markerValue: columnInfo.name
	};
	config.caption = columnInfo.caption;
	config.classes = {
		labelClass: ["grid-cols-" + columnInfo.colSpan,
			"gridRow" + columnInfo.name + "LabelCaption"]
	};
	return config;
},

 

Нравится

3 комментария
Лучший ответ

Это вы сильно глубоко копаете в логику системы. Находите схему ChangeAdminRightsUserTaskPropertiesPage, там есть код(функция generateChangeAdminRightsItemViewConfig) который создаете label и вещает на его нажатие функцию.

Это вы сильно глубоко копаете в логику системы. Находите схему ChangeAdminRightsUserTaskPropertiesPage, там есть код(функция generateChangeAdminRightsItemViewConfig) который создаете label и вещает на его нажатие функцию.

Полозюков Евгений Петрович,

Здравствуйте, в generateChangeAdminRightsItemViewConfig я должен передать уже созданный label? Как передать функцию, на которую я хочу повесить бинд? 

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

 

 

Изображение удалено.

 

 

Доброго времени суток коллеги. Я столкнулся с проблемой у меня есть функция:

 

 calculateBalance: function() {
                var amount = this.get("UsrBudgetSales");
                if (!amount) {
                    amount = 0;
                }
                var paymentAmount = this.get("UsrFacticallySum");
                if (!paymentAmount) {
                    paymentAmount = 0;
                }
                var result = amount - paymentAmount;
                this.set("UsrEqualsBudget", result);
 
            }

Она сразу же ставит значение в поле, а нужно чтобы при нажатии на кнопку "Вычислить" вызывалась функция и присваивался значение в колонку "Остаток бюджета": 

Изображение удалено.

Не могу сделать проверку тут,

	onPageClick: function(SetHelloAttribute, calculateBalance) {
                // if(какая-то проверка) {
                    this.calculateBalance();
               // }
 

Как я понял свойство set сразу же устанавливает значение в поле. А в methodName она вызывается? 

  dependencies: [
                    {
                        columns: ["UsrBudgetSales", "UsrFacticallySum"],
                        methodName: "calculateBalance"
                    }

Буду благодарен разъяснение. Так как недавно начал изучать Creatio, мог ошибиться в общей логике. Спасибо

Нравится

2 комментария
Лучший ответ

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

Обычно такая реализация используется для вычисляемых полей, подробный пример посмотрите в этой статье на Академии.

 

Таким образом для того, чтобы функция вызывалась только по нажатию кнопки Вам нужно полностью закомментировать блок dependencies и вызывать функцию только в обработчике нажатия кнопки [Вычислить].

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

Обычно такая реализация используется для вычисляемых полей, подробный пример посмотрите в этой статье на Академии.

 

Таким образом для того, чтобы функция вызывалась только по нажатию кнопки Вам нужно полностью закомментировать блок dependencies и вызывать функцию только в обработчике нажатия кнопки [Вычислить].

Алла Савельева, Все сработало. Благодарю

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

Добрый день коллеги!

Подскажите, хочу добавить свою логику после того как отрендерятся все виджеты на текущей дешбоарде.
Но не очень хочеться переопредилять базовые модули, переопределил только один PortalMainPageBuilder. Это все происходит на главной странице портала, как можно отловить момент загрузки всех виджетов, что бы я потом мог добавить свою логику ?

Нравится

1 комментарий

Добрый день.

Загрузка вложенных модулей дашборда запускается через sandbox в методе BaseDashboardViewModel.loadNestedModule() (пакет Platform).
Далее в методе BaseNestedModule.render() (пакет NUI) выполняется отрисовка каждого модуля и в конце вызывается метод представления onRender().

Для решения Вашей задачи потребуется подсчитывать количество загруженных и отрисованных модулей.
И момент, когда количество загруженных модулей равно количеству отрисованных, будет "моментом загрузки всех виджетов".

Такие доработки можно реализовать с помощью базового механизма обмена сообщениями sandbox.

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

Здравствуйте!

Есть задача : реализовать копирование задач на ScheduleControl. Cамо копирование реализовал, не могу получить даты начала / конца Event'a после его перетаскивания.
В по событию OnAfterDragEvent Event не меняется, даты остаются прежними; событие OnChangeEvent тоже не срабатывает в этот момент.

Подскажите, в каком направлении копать?

PS Terrasoft 3.3.2.267

Нравится

2 комментария

Андрей, используйте событие OnChangeEvent компонента ScheduleControl. В базовой версии обработчик события определен (обратите внимания на function ScheduleControlOnChangeEvent(ScheduleControl, Event) сервиса scr_SchedulerArea). В блоке

try {
UpdateDatasetRecordByEvent(SchedulerArea.EventsDataset, Event);
}

можно получить обновленные значения по задаче.
Проверила, при перетягивании задачи событие отрабатывает.

Спасибо, Наталия, буду разбираться :)

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