В общем задам вопрос отдельно.
В ActivitySectionV2 я добавил свой атрибут
"activeLeadId":{ DataValueType: Terrasoft.DataValueType.STRING }
В методе загрузки представления я устанавливаю его значение через this.set - все замечательно, вывожу сообщение - там то, что мне нужно.
А вот затем я формирую состав Url для iframe и мне нужно получить его значение. Не пойму как. Через this.get не работает.
diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "iframe", "parentName": "DataViewsContainer", "propertyName": "items", "values": { "id": "iframe", "selectors": {"wrapEl": "#iframe"}, "itemType": Terrasoft.ViewItemType.CONTAINER, "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 4 }, "html": '<iframe name="iframe" id="iframe" width="100%" height="700px"' + 'src="https://domain.com/base.php'+ '?owner='+ Terrasoft.SysValue.CURRENT_USER.value + '&leadid='+ //Вот сюда надо получить значение атрибута '" frameborder="0"></iframe>', "visible": {"bindTo": "isTimelineDataView"} }
Нравится
Создайте атрибут с нужной вам ссылкой (пecnfyjdbnm его например в init)
забиньте html на ваш атрибут с сылкой
Пример можно посмотреть в методе getRecommendationConfig схемы GlobalSearchResultPage
Григорий Чех,
Я вроде пробую забиндить, только не получается, те пишу в Init пишу
this.set("iframeUrl", '<iframe name="iframe" id="iframe" width="100%" height="700px"' + 'src="https://domain.com'+ '" frameborder="0"></iframe>');
Затем в Diff
diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "iframe", "parentName": "DataViewsContainer", "propertyName": "items", "values": { "id": "iframe", "selectors": {"wrapEl": "#iframe"}, "itemType": Terrasoft.ViewItemType.CONTAINER, "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 4 }, "html":{"bindTo": "iframeUrl"}, "visible": {"bindTo": "isTimelineDataView"} } },
И ничего не выводит, только заголовок секции - дальше пусто. Если в "html" прописываю код напрямую, то все работает.
Проблема даже в другом, я в методе Init задаю значение переменной, оно выводится корректно. Но, когда эту переменную использую в values, мне формируется url предыдущий, как из кэша.
Те через переменную сформировать нужный html получается, но выводится старое значение, через атрибут не получается получить значение((
Особенно с переменной непонятно, на каком уровне кэшируется все. Если просто alert или в консоль, но значение правильное, а в iframe старое из предыдущего открытия этой страницы.
В итоге, вместо атрибута я смог вставлять туда функцию обычную, но вот проблема - она не вызывается, если не делать рефреш страницы. Те неважно, какой там код внутри DIFF, он просто не вызывается. Те получается, неважно как я получаю ID, будь то URL или любой другой способ, чтобы вставить его в iframe - нужно как-то его обновить принудительно.
Вот вопрос - как это побороть?
Вот полный исходный код на текущий момент. Куда копать в части принудительного обновления и/или сброса кэша?
define("ActivitySectionV2", [], function() { var currentLocation = ''; var leadGuid = ''; function getFrame() { currentLocation = window.location+''; leadGuid = getAllUrlParams(currentLocation).guid; if (leadGuid != null) { var strFrame = '<iframe name="iframe" id="iframe" width="100%" height="700px"' + 'src="https://domain.com'+ '/'+ Terrasoft.SysValue.CURRENT_USER.value + '/'+ leadGuid + '" frameborder="0"></iframe>'; } else { var strFrame = '<iframe name="iframe" id="iframe" width="100%" height="700px"' + 'src="https://domain.com'+ '/'+ Terrasoft.SysValue.CURRENT_USER.value + '" frameborder="0"></iframe>'; } alert(strFrame); return strFrame; } //Функция получения параметра из businessRules function getAllUrlParams(url) { //код функции ..... return obj; } return { entitySchemaName: "Activity", mixins: {}, attributes: { "isTimelineVisible": { dataValueType: Terrasoft.DataValueType.BOOLEAN }, // "activeLeadId":{ // DataValueType: Terrasoft.DataValueType.STRING //}, // "iframeUrl":{ // DataValueType: Terrasoft.DataValueType.TEXT // } }, messages: {}, methods: { getDefaultDataViews: function(){ var baseDataViews = this.callParent(); baseDataViews.TimelineDataView = { index: 3, name: "TimelineDataView", caption: "Расписание", hint: "Таймлайн", icon: this.get("Resources.Images.SchedulerDataViewIcon") }; return baseDataViews; }, loadTimelineDataView: function(loadData) { this.set("IsActionButtonsContainerVisible", true); this.set("isTimelineVisible", true); this.set("IsAnalyticsActionButtonsContainerVisible", false); if (loadData === false) { return; } }, isTimelineDataView: function() { return (this.get("ActiveViewName") === "TimelineDataView"); }, isNotTimelineDataView: function() { return !this.isTimelineDataView(); } }, rules: {}, businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/, modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "iframe", "parentName": "DataViewsContainer", "propertyName": "items", "values": { "id": "iframe", "selectors": {"wrapEl": "#iframe"}, "itemType": Terrasoft.ViewItemType.CONTAINER, "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 4 }, "html":getFrame(), "visible": {"bindTo": "isTimelineDataView"} } }, { "operation": "merge", "name": "GridUtilsContainer", "propertyName": "items", "values": { 'visible': {"bindTo": "isNotTimelineDataView"} } } ]/**SCHEMA_DIFF*/ }; });
Зверев Александр,
А тут страница раздела, не срабатывает(( Пишет this.reloadEntity() is not a function. Я уже все перепробовал - не совсем пойму, вот у меня в DIFF формируется html и там есть вызов функции (getIframe). Так вот она отрабатывает только если F5 сделать, и все. Такое ощущение, что один раз этот код отработал и все, держит в кэше где-то.
Потом ходишь по меню - никаких изменений. Пробовал на Onrender повесить изменение DOM - тоже не работает, вроде как DOM уже есть, меняю src и ничего, все перезаписывается, в общем везде затык. А после onrender методов и нет никаких.
Зверев Александр,
При этом методы Init и OnRender отрабатывают при каждом переходе.
Вопрос - как мне в них изменить массив Values элемента. Если я сделаю как-то через bindTo (хотя не получилось через атрибут - просто не грузится) - это должно работать или также закэшируется, как и обычная функция?