Здравствуйте! Не нашел в академии, что означают события на объекте "Перед загрузкой данных" и "После загрузки данных". В каких случаях они применяются?

Нравится

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

Это события Loading и Loaded. Первое срабатывает до загрузки значений полей в цикле, второе —после.

Посмотреть, в каких схемах объектов они применяются, можно запросом в базу:

select *
from SysSchemaSource
where (source like '%loading +=%' or source like '%loaded +=%')
and  not (name  like '%page.cs')

Там всего несколько упоминаний на всю систему. Первое, похоже, используют для проверки наличия прав на чтение значений полей, которые задаёт не стандартный механизм, а операция. Второе — после загрузки значений в поля получить нужное, что-то рассчитать и записать в это же поле результат.

Зверев Александр,

спасибо за ответ!

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

Коллеги всем доброго времени суток!

Нужна помощь.

Есть код обработчик:

 

diff:[
			{
				"operation": "insert",
				"name": "AltNoInformationInterestd2e10eaa-14f7-4005-96b9-78145978b4f2",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "GeneralInfoTabGridLayout8576b06a"
					},
					"labelConfig": {},
					"enabled": true,
					"bindTo": "AltNoInformationInterest",
					"controlConfig": {
						"checkedchanged": {
							"bindTo": "onInterestCheked"
						}
					}
				},
				"parentName": "GeneralInfoTabGridLayout8576b06a",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "AltAbsentInterestb586a604-e240-48b6-ba46-2889721a98cf",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "GeneralInfoTabGridLayout8576b06a"
					},
					"labelConfig": {},
					"enabled": true,
					"bindTo": "AltAbsentInterest",
					"controlConfig": {
						"checkedchanged": {
							"bindTo": "onInterestCheked"
						}
					}
				},
				"parentName": "GeneralInfoTabGridLayout8576b06a",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "AltHaveInterest8b3652ac-d60d-4562-a1a5-e28a28cbce58",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 2,
						"layoutName": "GeneralInfoTabGridLayout8576b06a"
					},
					"labelConfig": {},
					"enabled": true,
					"bindTo": "AltHaveInterest",
					"controlConfig": {
						"checkedchanged": {
							"bindTo": "onInterestCheked"
						}
					}
				},
				"parentName": "GeneralInfoTabGridLayout8576b06a",
				"propertyName": "items",
				"index": 2
			},
],
methods: {
onInterestCheked : function() {
				debugger;
				//var event = window.event;
				if(event) {
					if(event.currentTarget.toString() != "[object XMLHttpRequest]")
					{
						if(this.get("AltNoInformationInterest")  == false 
							&& event.currentTarget.id.indexOf("AltNoInformationInterest") >= 0)
						{
							this.set("AltNoInformationInterest", true);
							this.set("AltAbsentInterest", false);
							this.set("AltHaveInterest", false);
						}
 
						if(this.get("AltAbsentInterest") == false && event.currentTarget.id.indexOf("AltAbsentInterest") >= 0)
						{
							this.set("AltAbsentInterest", true);
							this.set("AltNoInformationInterest", false);
							this.set("AltHaveInterest", false);
						}
 
						if(this.get("AltHaveInterest") == false  && event.currentTarget.id.indexOf("AltHaveInterest") >= 0)
						{
							this.set("AltHaveInterest", true);
							this.set("AltAbsentInterest", false);
							this.set("AltNoInformationInterest", false);
						}
					}
				} 
				else {
					console.log("");
				}
			},
}

В хроме работает отлично, но в FireFox ругается на event. т.к. не определено и не отображало часть контента карточки.

определил event:

var event = window.event;

ошибку перестало бить но метод перестал корректно работать:

Chrome: http://prntscr.com/lkanf6

Firefox: http://prntscr.com/lkaoau

Кто нибудь сталкивался с подобным? И как с этим бороться?

Заранее благодарен.

Нравится

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

Можно попробовать для каждого типа браузеров определить логику, получив браузер



var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);

 

Проще проверять на null значение event и если да — применять то или иное обходное решение.

WebKit follows IE's old behavior of using a global symbol for "event", but Firefox doesn't. When you're using jQuery, that library normalizes the behavior and ensures that your event handlers are passed the event parameter.

Вопрос с этой особенностью Firefox рассматривается во многих местах, см. ссылки: 1, 2, 3, 4, 5.

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

Каким образом можно подписаться на событе удаления(до сохранения изменений) записи на встроенной(Embedded) детали?

Нравится

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

Добрый день, Алексей!

В BaseEditPageController есть метод removeItemFromEmbeddedDetail(), который вызывает как раз перед моментом удаления записи во встроенной детали.
Его текущий код:

removeItemFromEmbeddedDetail: function(record) {
                               this.changeListenersOnRecordEvents(record, true);
                },

Соответственно, все, что нужно сделать, просто перекрыть этот метод, реализовать свою логику и вызвать родительскую. Выглядит это примерно вот так:

Terrasoft.controller.BaseEditPage.prototype.removeItemFromEmbeddedDetail = function(record) {
//Здесь какая-то логика
this.changeListenersOnRecordEvents(record, true);
};
Показать все комментарии